Wordpress API: добавление / удаление тегов в сообщениях - PullRequest
12 голосов
/ 13 марта 2010

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

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

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;
}

Ответы [ 6 ]

5 голосов
/ 13 марта 2010

Вам необходимо сначала позвонить 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;
}
4 голосов
/ 13 марта 2010

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

2 голосов
/ 21 июня 2014

Начиная с 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

2 голосов
/ 12 апреля 2010

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

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

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

1 голос
/ 11 января 2013

На самом деле, 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. ID сообщения
  2. Принимает ...
    • одна строка (например, «Потрясающие сообщения»)
    • один идентификатор существующего тега (например, 1) или
    • массив любого из них (например, array ('Awesome Posts', 1)).
    • ПРИМЕЧАНИЕ: Если вы укажете NON-ID, автоматически создаст тег .
  3. Таксономия (например, для тегов по умолчанию используйте 'post_tag').
  4. Стоит ли ...
    • (FALSE) ЗАМЕНИТЕ ВСЕ существующие условия на предоставленные, или
    • (TRUE_) ПРИЛОЖИТЬ / ДОБАВИТЬ к существующим условиям.

Удачного кодирования!

1 голос
/ 20 мая 2011

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

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

function your_wp_function($postid) {
}
...