wp_set_object_terms()
Прикріплює пост (запис) до терміну (елемент таксономії). Наприклад, можна помістити пост у цю категорію. Створює терміни, якщо їх немає.
Потрібно, щоб термін був у зазначеній таксономії. Немає сенсу вказувати термін(и), якщо суворо не визначити до якої таксономії він відноситься.
Важливо: якщо в $terms вказуються ID, або масив з ID, то переконайтеся, що змінні передаються як числа (тип int), а не як рядки! Тому що рядки у вигляді числа, наприклад, '98'
інтерпретуватимуться як назва терміна, а не його ID!
Використовуйте wp_remove_object_terms() , щоб навпаки видалити запис з термінів.
wp_set_post_terms()
Хуки з функції
Повертає
Массив|WP_Error
. Масив ID термінів, яких були прикріплені записи. У разі помилки поверне WP_Error об’єкт.
Використання
wp_set_object_terms( $object_id, $terms, $taxonomy, $append );
-
$object_id
(число) (обов’язковий) - ID запису, який потрібно зв’язати із терміном.
-
$terms
(рядок/масив/число) (обов’язковий) Назва, ярлик або ID елемента таксономії, який потрібно встановити або створити та встановити для запису.
Функція створить новий термін, якщо знайде відповідний.
- Якщо вказати назву (у кирилиці), то функція створить термін. При цьому: назва буде назвою, слаг слагом (обробиться як завжди).
Важливо: якщо вказуються ID або масив з ID, то переконайтеся, що змінні передаються як числа (тип int), а не як рядки! Тому що рядки у вигляді числа, наприклад,
'98'
інтерпретуватимуться як назва терміна, а не його ID!-
$taxonomy
(рядок) (обов’язковий) -
Таксономія до якої належать зазначені терміни, які слід пов’язати із записом.
Наприклад:
category
,
post_tag
або назва довільної таксономії. -
$append
(логічний) Додати зв’язок або встановити новий:
- false (за замовчуванням) – старий зв’язок запису з термінами буде розірваний і встановлений зв’язок з новими (зазначеними) термінами.
- true – старі зв’язки залишаться (заміняться при збігу) і додадуться нові вказані зв’язки.
Типово: false
Приклади
#1 Помістимо запис у вказані рубрики
Приклад, що показує як додати запис 42 у категорії 6 та 8:
$ cat_ids = array (6, 8); // щоб переконатися, що терміни передані як числа: // $cat_ids = array_map('intval', $cat_ids); wp_set_object_terms( 42, $cat_ids, 'category');
Якщо ID термінів вказано як рядки, wp_set_object_terms() створить рубрики з такими назвами, а не прикріпить запис до терміну…
#2 Видалимо запис зі всіх рубрик
Якщо потрібно видалити запис 42 з усіх рубрик (навіть встановлений за замовчуванням):
wp_set_object_terms( 42, NULL, 'category' );
#3 Створимо мітки та помістимо в них запис
Цей приклад створює мітки метка1
і метка2
якщо таких міток немає і поміщає в ці мітки запис 54:
wp_set_object_terms( 54, array('мітка1','мітка2'), 'post_tag');
#4 Суворіша функція встановлення терміну для посту
Щоб не перейматися тим, що поточна функція може створити термін якщо його немає і якої при цьому обов’язково потрібно вказувати таксономію, навіть якщо ми передаємо ID термінів.
Вся ця магія лише ускладнює код. Тому в одному зі своїх проектів я написав наступну функцію, з якою простіше та зрозуміліше працювати.
Цій функції потрібно передати ID посту та ID терміна/термінів до яких ми хочемо прикріпити пост. Таксономію вказувати не потрібно. Якщо зазначеного терміна немає, то функції просто пропустить його, нічого не створюючи. Якщо вказано ID термінів із різних таксономій – ви отримаєте помилку.
/** * Sets specified terms for the specified posts. * Wrapper for wp_set_object_terms(). Its strict variant where you * Потрібно до specify $term_ids як номери і не потрібно для specify taxonomy. * * @param int $post_id * @param int[]|int $term_ids * @param bool $append * * @return int[]|WP_Error */ function strict_set_post_terms( $post_id, $term_ids, $append = true ){ $post_id = (int) $post_id; $term_ids = array_filter( array_map( 'intval', (array) $term_ids ) ); if( ! $post_id ){ return new WP_Error( 'error', '$post_id no specified.' ); } if( ! $term_ids ){ return new WP_Error( 'error', '$term_ids не specified.' ); } $taxonomy = ''; // check terms foreach( $term_ids as $index => $term_id ){ $ term = get_term ($ term_id); if( ! $term ){ unset($term_ids[$index]); } if( $taxonomy && $taxonomy !== $term->taxonomy ){ New WP_Error( 'error', 'Terms from different taxonomies are specified.' ); } $taxonomy = $term->taxonomy; } $res = wp_set_object_terms( $post_id, $term_ids, $taxonomy, $append ); if( ! is_wp_error( $res ) ){ $res = array_map( 'intval', $res); } return $res; }
нотатки
- Global. wpdb. $wpdb WordPress database abstraction object.
список змін
З версії 2.3.0 | Введено. |