wp_set_post_terms()
Устанавливает термины для указанной записи (рубрики для поста).
Для древовидных терминов нужно передавать ID термина а не название, а то может возникнуть конфликт названий: могут быть одинаковые названия терминов в разных ветках.
ID термина можно посмотреть в админке (в ссылке) или получить так:
$term_id = term_exists($term, $taxonomy, $parent )['term_id'];
Хуков нет.
Возвращает
Массив|false|WP_Error
.
- false - если $post_id не число или равно 0.
- массив ID, которые были задействованы.
- WP_Error - при ошибке.
Использование
wp_set_post_terms( $post_ID, $tags, $taxonomy, $append );
- $post_ID(int) (обязательный)
- ID поста.
- $tags(string|array|int[])
Список элементов таксономии в виде массива или строки через запятую.
Если передаются числа, то их нужно передавать в виде массива, даже одно число, например
[ 123 ]
.Также важно убедиться, что передаваемые ID имеют тип int, а не string! Потому что строки в виде числа, например, '123' будут интерпретироваться как название термина, а не его ID! В новых версиях движка этот баг вроде поправили.
Если таксономия древовидная, то нужно всегда указывать ID терминов (в виде числа)! Если передать строки, то они превратятся в 0. Это нужно, потому что древовидные таксы, могут иметь два термина с одинаковыми названиями.
Функция создаст новый термин, если не найдет подходящий. При этом, если указать название в кириллице, то имя будет указанное, а слаг будет обработан как обычно (функцией sanitize_title()).
По умолчанию: ''
- $taxonomy(string)
- Название таксономии, к элементам которой прикреплять запись(и).
По умолчанию: post_tag - $append(true|false)
- Добавить к существующим или заменить термины:
true — будут добавлены к существующим;
false — будут заменены.
По умолчанию: false
Примеры
#1 Категории и метки по умолчанию
Нижеследующий пример кода, который можно вставить в functions.php для того, чтобы при сохранении поста ему указывалась рубрика (название рубрики) и метка (название метки) по умолчанию, если такие метка/рубрика еще не указаны:
add_action( 'wp_insert_post', 'update_post_terms' ); function update_post_terms( $post_id ) { if ( $parent = wp_is_post_revision( $post_id ) ) $post_id = $parent; $post = get_post( $post_id ); if ( $post->post_type != 'post' ) return; // добавим метку по умолчанию wp_set_post_terms( $post_id, 'название метки', 'post_tag', true ); // добавим категорию по умолчанию $categories = wp_get_post_categories( $post_id ); $newcat = get_term_by( 'name', 'название рубрики', 'category' ); array_push( $categories, $newcat->term_id ); wp_set_post_categories( $post_id, $categories ); }
Заметки
- Смотрите: wp_set_object_terms()
Список изменений
С версии 2.8.0 | Введена. |