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
(число) (обов’язковий)
ID посту.
$tags
(рядок/масив/число[])

Список елементів таксономії у вигляді масиву або рядка через кому.

Якщо таксономія деревоподібна, потрібно завжди вказувати лише ID термінів (у вигляді числа)! Якщо передати рядки, то вони перетворяться на 0. Це потрібно, тому що деревоподібні такси можуть мати 2 терміни з однаковими назвами.

Також важливо переконатися, що передані ID передаються з типом “число”, а не “рядок”! Тому що рядки у вигляді числа, наприклад, ’98’ інтерпретуватимуться як назва терміна, а не його ID! У нових версіях двигуна цей баг начебто поправили.

Функція створить новий термін, якщо знайде відповідний. При цьому, якщо вказати назву в кирилиці, ім’я буде вказане, а склад буде оброблений як звичайно (функцією sanitize_title() ).

За замовчуванням: ”

$taxonomy
(рядок)
Назва таксономії, до елементів якої прикріплювати запис(и).


Типово: post_tag
$append
(логічний)
Додати до існуючих або замінити терміни:

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.0.2

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, "ntrx0B,"));
	}

	/*
	 * 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 );
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *