WordPress как на ладони
rgbcode is looking for WordPress developers.

wp_set_post_terms()WP 2.8.0

Устанавливает термины для указанной записи (рубрики для поста).

Для древовидных терминов нужно передавать ID термина а не название, а то может возникнуть конфликт названий: могут быть одинаковые названия терминов в разных ветках.

ID термина можно посмотреть в админке (в ссылке) или получить так:

$term_id = term_exists($term, $taxonomy, $parent )['term_id'];
Работает на основе: wp_set_object_terms()

Хуков нет.

Возвращает

Массив|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

Примеры

0

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

Заметки

Список изменений

С версии 2.8.0 Введена.

Код wp_set_post_terms() WP 6.4.3

function wp_set_post_terms( $post_id = 0, $terms = '', $taxonomy = 'post_tag', $append = false ) {
	$post_id = (int) $post_id;

	if ( ! $post_id ) {
		return false;
	}

	if ( empty( $terms ) ) {
		$terms = array();
	}

	if ( ! is_array( $terms ) ) {
		$comma = _x( ',', 'tag delimiter' );
		if ( ',' !== $comma ) {
			$terms = str_replace( $comma, ',', $terms );
		}
		$terms = explode( ',', trim( $terms, " \n\t\r\0\x0B," ) );
	}

	/*
	 * Hierarchical taxonomies must always pass IDs rather than names so that
	 * children with the same names but different parents aren't confused.
	 */
	if ( is_taxonomy_hierarchical( $taxonomy ) ) {
		$terms = array_unique( array_map( 'intval', $terms ) );
	}

	return wp_set_object_terms( $post_id, $terms, $taxonomy, $append );
}
9 комментариев
    Войти