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;
}
Ответы
Ответ 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 к существующим условиям.
Счастливое кодирование!