Подтвердить что ты не робот

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

Ответ 1

Вам нужно сначала вызвать 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;
}

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

Так как 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

Ответ 5

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

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

function your_wp_function($postid) {
}

Ответ 6

Собственно, 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:

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

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