| | 1 | <?php |
| | 2 | |
| | 3 | // TODO: Split these across tag.php, tag-template.php, and admin-db.php |
| | 4 | |
| | 5 | |
| | 6 | function get_post_tags ( $post_id = false ) { |
| | 7 | global $post_tag_cache, $wpdb, $post; |
| | 8 | |
| | 9 | if ( empty($post_id) ) |
| | 10 | $post_id = $post->ID; |
| | 11 | |
| | 12 | if ( isset ($post_tag_cache[$post_id] ) ) |
| | 13 | return $post_tag_cache[$post_id]; |
| | 14 | |
| | 15 | $post_tag_cache[$post_id] = $wpdb->get_results("SELECT * FROM $wpdb->tagged RIGHT JOIN $wpdb->tags ON ($wpdb->tags.tag_id = $wpdb->tagged.tag_id) WHERE post_id = '$post_id'"); |
| | 16 | |
| | 17 | return $post_tag_cache[$post_id]; |
| | 18 | } |
| | 19 | |
| | 20 | function &get_tag(&$tag, $output = OBJECT) { |
| | 21 | global $wpdb; |
| | 22 | |
| | 23 | if ( empty($tag) ) |
| | 24 | return null; |
| | 25 | |
| | 26 | if ( is_object($tag) ) { |
| | 27 | wp_cache_add($tag->tag_id, $tag, 'tag'); |
| | 28 | $_tag = $tag; |
| | 29 | } else { |
| | 30 | if ( ! $_tag = wp_cache_get($tag, 'tag') ) { |
| | 31 | $_tag = $wpdb->get_row("SELECT * FROM $wpdb->tags WHERE tag_id = '$tag' LIMIT 1"); |
| | 32 | wp_cache_set($tag, $_tag, 'tag'); |
| | 33 | } |
| | 34 | } |
| | 35 | |
| | 36 | $_tag = apply_filters('get_tag', $_tag); |
| | 37 | |
| | 38 | if ( $output == OBJECT ) { |
| | 39 | return $_tag; |
| | 40 | } elseif ( $output == ARRAY_A ) { |
| | 41 | return get_object_vars($_tag); |
| | 42 | } elseif ( $output == ARRAY_N ) { |
| | 43 | return array_values(get_object_vars($_tag)); |
| | 44 | } else { |
| | 45 | return $_tag; |
| | 46 | } |
| | 47 | } |
| | 48 | |
| | 49 | function get_tag_id($tag_name) { |
| | 50 | global $wpdb; |
| | 51 | |
| | 52 | $tag_id = $wpdb->get_var("SELECT tag_id FROM $wpdb->tags WHERE raw_tag = '$tag_name'"); |
| | 53 | |
| | 54 | return $tag_id; |
| | 55 | } |
| | 56 | |
| | 57 | function get_tag_by_name() { |
| | 58 | |
| | 59 | } |
| | 60 | |
| | 61 | function get_tag_name($tag_id) { |
| | 62 | $tag_id = (int) $tag_id; |
| | 63 | $tag = &get_tag($tag_id); |
| | 64 | return $tag->raw_tag; |
| | 65 | } |
| | 66 | |
| | 67 | function get_tag_link() { |
| | 68 | |
| | 69 | } |
| | 70 | |
| | 71 | // Template funcs |
| | 72 | |
| | 73 | function get_the_tag_list() { |
| | 74 | |
| | 75 | } |
| | 76 | |
| | 77 | function the_tags() { |
| | 78 | |
| | 79 | } |
| | 80 | |
| | 81 | function wp_list_tags() { |
| | 82 | |
| | 83 | } |
| | 84 | |
| | 85 | // Admin funcs |
| | 86 | |
| | 87 | function wp_create_tag( $tag ) { |
| | 88 | global $wpdb; |
| | 89 | $raw_tag = $tag; |
| | 90 | $tag = sanitize_title( $tag ); |
| | 91 | if ( empty( $tag ) ) |
| | 92 | return false; |
| | 93 | if ( $exists = $wpdb->get_var("SELECT tag_id FROM $wpdb->tags WHERE tag = '$tag'") ) |
| | 94 | return $exists; |
| | 95 | |
| | 96 | $wpdb->query("INSERT INTO $wpdb->tags ( tag, raw_tag ) VALUES ( '$tag', '$raw_tag' )"); |
| | 97 | $tag_id = $wpdb->insert_id; |
| | 98 | do_action('wp_tag_created', $raw_tag, $tag_id); |
| | 99 | return $tag_id; |
| | 100 | } |
| | 101 | |
| | 102 | function wp_set_post_tags($post_ID = 0, $post_tags = array()) { |
| | 103 | global $wpdb; |
| | 104 | if (!is_array($post_tags) || 0 == count($post_tags) || empty($post_tags)) |
| | 105 | $post_tags = array(); |
| | 106 | |
| | 107 | $post_tags = array_unique($post_tags); |
| | 108 | |
| | 109 | // First the old tags |
| | 110 | $old_tags = $wpdb->get_col(" |
| | 111 | SELECT tag_id |
| | 112 | FROM $wpdb->tagged |
| | 113 | WHERE post_id = $post_ID"); |
| | 114 | |
| | 115 | if (!$old_tags) { |
| | 116 | $old_tags = array(); |
| | 117 | } else { |
| | 118 | $old_tags = array_unique($old_tags); |
| | 119 | } |
| | 120 | |
| | 121 | // Delete any? |
| | 122 | $delete_tags = array_diff($old_tags,$post_tags); |
| | 123 | |
| | 124 | if ($delete_tags) { |
| | 125 | foreach ($delete_tags as $del) { |
| | 126 | $wpdb->query(" |
| | 127 | DELETE FROM $wpdb->tagged |
| | 128 | WHERE tag_id = $del |
| | 129 | AND post_id = $post_ID |
| | 130 | "); |
| | 131 | } |
| | 132 | } |
| | 133 | |
| | 134 | // Add any? |
| | 135 | $add_tags = array_diff($post_tags, $old_tags); |
| | 136 | |
| | 137 | if ($add_tags) { |
| | 138 | foreach ($add_tags as $new_tag) { |
| | 139 | if ( !empty($new_tag) ) |
| | 140 | $wpdb->query(" |
| | 141 | INSERT INTO $wpdb->taggewd (post_id, tag_id) |
| | 142 | VALUES ($post_ID, $new_tag)"); |
| | 143 | } |
| | 144 | } |
| | 145 | |
| | 146 | // Update tag counts. |
| | 147 | $all_affected_tags = array_unique(array_merge($post_tags, $old_tags)); |
| | 148 | foreach ( $all_affected_tags as $tag_id ) { |
| | 149 | $count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->tagged, $wpdb->posts WHERE $wpdb->posts.ID=$wpdb->tagged.post_id AND post_status = 'publish' AND post_type = 'post' AND tag_id = '$tag_id'"); |
| | 150 | $wpdb->query("UPDATE $wpdb->tags SET tag_count = '$count' WHERE tag_id = '$tag_id'"); |
| | 151 | clean_tag_cache($tag_id); |
| | 152 | do_action('edit_tag', $tag_id); |
| | 153 | } |
| | 154 | } |
| | 155 | |
| | 156 | ?> |