WordPress как на ладони
wordpress jino

wp_set_post_terms() WP 2.8.0

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

Работает на основе: 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(число) (обязательный)
ID поста.
$tags(строка/число/массив)

Список элементов таксономии в виде массива или в строке через запятую.

Если таксономия древовидная, то тут нужно всегда указывать только ID терминов! Если предать строки, то они превратятся в 0... Это нужно, потому что древовидные таксы, могут иметь 2 термина с одинаковыми названиями...

Функция создаст новый термин, если не найдет подходящий.

  • Если указать название (в кириллице), то функция создаст термин. При этом: название будет названием, слаг слагом (обработается как обычно).

Важно: если передается ID, или массив из ID, то убедитесь, что переменные передаются как числа, а не как строки! Потому что строки в виде числа, например, '98' будут интерпретироваться как название термина, а не его ID!

По умолчанию: ''

$taxonomy(строка)
Название таксономии, к элементам которой прикреплять запись(и).
По умолчанию: post_tag
$append(логический)
Добавить к существующим или заменить термины:
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 );
}

Заметки

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

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

$term_id = term_exists($term, $taxonomy, $parent )['term_id'];

Код wp set post terms: wp-includes/post.php WP 4.8.2

<?php
function wp_set_post_terms( $post_id = 0, $tags = '', $taxonomy = 'post_tag', $append = false ) {
	$post_id = (int) $post_id;

	if ( !$post_id )
		return false;

	if ( empty($tags) )
		$tags = array();

	if ( ! is_array( $tags ) ) {
		$comma = _x( ',', 'tag delimiter' );
		if ( ',' !== $comma )
			$tags = str_replace( $comma, ',', $tags );
		$tags = explode( ',', trim( $tags, " \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 ) ) {
		$tags = array_unique( array_map( 'intval', $tags ) );
	}

	return wp_set_object_terms( $post_id, $tags, $taxonomy, $append );
}

Cвязанные функции

Из метки: term (термины таксономий)

Еще из раздела: Для записей

wp_set_post_terms 2 комментария
  • Влад

    А как при добавлении термина сделать так, чтобы слаг был не на русском? Спасибо!

    Ответитьгод назад #

Здравствуйте, !

Ваш комментарий