WordPress API: добавление / удаление тегов в сообщениях

Я знаю, что это простая операция, но я не могу найти какой-либо ресурс или документацию, которая объясняет, как программно добавлять и удалять теги в сообщение, используя идентификатор сообщения.

Ниже приведен пример того, что я использую, но он, кажется, перезаписывает все другие теги …

function addTerm($id, $tax, $term) { $term_id = is_term($term); $term_id = intval($term_id); if (!$term_id) { $term_id = wp_insert_term($term, $tax); $term_id = $term_id['term_id']; $term_id = intval($term_id); } $result = wp_set_object_terms($id, array($term_id), $tax, FALSE); return $result; } 

Вы должны сначала вызвать get_object_terms, чтобы получить все существующие термины.

Обновленный код

 function addTerm($id, $tax, $term) { $term_id = is_term($term); $term_id = intval($term_id); if (!$term_id) { $term_id = wp_insert_term($term, $tax); $term_id = $term_id['term_id']; $term_id = intval($term_id); } // get the list of terms already on this object: $terms = wp_get_object_terms($id, $tax) $terms[] = $term_id; $result = wp_set_object_terms($id, $terms, $tax, FALSE); return $result; } 

Попробуйте использовать wp_add_post_tags($post_id,$tags) ;

Вот как я это делаю:

 $tag="This is the tag" $PostId=1; // wp_set_object_terms( $PostId, array($tag), 'post_tag', true ); 

Примечание: wp_set_object_terms() ожидает, что вторым параметром будет массив.

Поскольку WordPress 3.6 существует wp_remove_object_terms( $object_id, $terms, $taxonomy ) который делает именно это.

Параметр $terms представляет собой slug(s) или ID(s) term(s) для удаления и принятия массива, int или строки.

Источник: http://codex.wordpress.org/Function_Reference/wp_remove_object_terms

Что делать, если вы не знаете идентификатор сообщения? Вы просто хотите добавить тег ко всем новым сообщениям?

При использовании функции WordPress API add_action('publish_post', 'your_wp_function'); , функция, которую вы вызываете автоматически, получает post_id введенный в качестве первого аргумента:

 function your_wp_function($postid) { } 

Фактически, wp_set_object_terms может обрабатывать все, что вам нужно:

Если вам действительно нужна отдельная функция:

 function addTag($post_id, $term, $tax='post_tag') { return wp_set_object_terms($post_id, $term, $tax, TRUE); } 

wp_set_object_terms :

  1. Идентификатор сообщения
  2. Принимает …
    • одна строка (например, «Awesome Posts»)
    • один идентификатор существующего тега (например, 1) или
    • массив либо (например, массив («Awesome Posts», 1)).
    • ПРИМЕЧАНИЕ. Если вы предоставите NON-ID, он автоматически создаст тег.
  3. Таксономия (например, для тегов по умолчанию, используйте post_tag).
  4. Стоит ли…
    • ( FALSE ) ЗАМЕНА ВСЕХ существующих условий с предоставленными или
    • ( TRUE_ ) APPEND / ADD к существующим условиям.

Счастливое кодирование!