wp_set_post_terms()

Устанавливает термины для поста
Функция WordPress
INT 2.8.0
WordPress Icon
Содержание
  1. Описание функции
  2. Примеры использования
  3. Установка терминов для поста
  4. Добавление новых терминов
  5. Замена терминов
  6. Установка терминов для разных таксономий
  7. Добавление терминов без удаления существующих
  8. Вопросы и ответы
  9. Как добавить термины к посту с помощью функции wp_set_post_terms()?
  10. Как удалить существующие термины и заменить их новыми с помощью функции wp_set_post_terms()?
  11. Как добавить новые термины, не удаляя существующие, с помощью функции wp_set_post_terms()?
  12. Как получить список ID терминов, связанных с постом, с помощью функции wp_set_post_terms()?
  13. Как обработать ошибку при использовании функции wp_set_post_terms()?
  14. Как использовать функцию wp_set_post_terms() с нестандартной таксономией?
  15. Как использовать функцию wp_set_post_terms() для постов с дочерними терминами?
  16. Как использовать функцию wp_set_post_terms() для постов с несколькими таксономиями?
  17. Как использовать функцию wp_set_post_terms() для постов без указания таксономии?
  18. Связанные элементы

Описание функции

Функция wp_set_post_terms() используется для установки терминов (категорий или меток) для указанного поста в WordPress.

Она позволяет добавлять новые термины или заменять существующие термины для указанного поста.

Функция принимает идентификатор поста, термины (категории или метки), также можно указать таксономию и флаг для добавления или замены терминов.

Использование

wp_set_post_terms( int $post_id, string|array $terms = '', string $taxonomy = 'post_tag', bool $append = false ): array|false|WP_Error

Эта функция принимает четыре параметра:

  • $post_id (обязательный) — идентификатор поста. Не использует значение ID глобальной переменной $post.
  • $terms (необязательный) — массив терминов для установки для поста или строка терминов, разделенных запятыми. Для иерархических таксономий всегда следует передавать идентификаторы терминов, а не их названия, чтобы избежать путаницы с детьми, имеющими одинаковые названия, но разных родителей. По умолчанию: пустая строка.
  • $taxonomy (необязательный) — название таксономии. По умолчанию: ‘post_tag’.
  • $append (необязательный) — если установлено значение true, то существующие термины не будут удалены, а только добавлены новые. Если установлено значение false, то существующие термины будут заменены новыми. По умолчанию: false.

Функция возвращает массив идентификаторов терминов, которые были изменены или добавлены. В случае ошибки возвращает объект WP_Error или false.

<?php
$post_id = 123; // Идентификатор поста
$terms = array( 'term1', 'term2' ); // Массив терминов
$taxonomy = 'category'; // Название таксономии
$append = false; // Заменить существующие термины
$result = wp_set_post_terms( $post_id, $terms, $taxonomy, $append );
if ( ! is_wp_error( $result ) ) {
    // Термины успешно установлены или заменены
    $term_ids = $result;
    echo 'Термины успешно установлены или заменены: ' . implode( ', ', $term_ids );
} else {
    // Произошла ошибка
    $error_message = $result->get_error_message();
    echo 'Ошибка: ' . $error_message;
}
?>

В этом примере мы устанавливаем или заменяем термины для поста с идентификатором 123. Мы передаем массив терминов [‘term1’, ‘term2’], указываем таксономию ‘category’ и устанавливаем флаг $append в значение false. Затем мы проверяем результат и выводим соответствующее сообщение.

Примеры использования

Установка терминов для поста


$post_id = 123;
$terms = array( 'term1', 'term2', 'term3' );
$result = wp_set_post_terms( $post_id, $terms );
if ( is_wp_error( $result ) ) {
    echo 'Ошибка: ' . $result->get_error_message();
} else {
    echo 'Термины успешно установлены для поста с ID ' . $post_id;
}

Добавление новых терминов


$post_id = 123;
$terms = array( 'term4', 'term5' );
$result = wp_set_post_terms( $post_id, $terms, 'category', true );
if ( is_wp_error( $result ) ) {
    echo 'Ошибка: ' . $result->get_error_message();
} else {
    echo 'Новые термины успешно добавлены для поста с ID ' . $post_id;
}

Замена терминов


$post_id = 123;
$terms = array( 'term6', 'term7' );
$result = wp_set_post_terms( $post_id, $terms, 'post_tag', false );
if ( is_wp_error( $result ) ) {
    echo 'Ошибка: ' . $result->get_error_message();
} else {
    echo 'Термины успешно заменены для поста с ID ' . $post_id;
}

Установка терминов для разных таксономий


$post_id = 123;
$terms = array( 'term8', 'term9' );
$result = wp_set_post_terms( $post_id, $terms, 'custom_taxonomy' );
if ( is_wp_error( $result ) ) {
    echo 'Ошибка: ' . $result->get_error_message();
} else {
    echo 'Термины успешно установлены для поста с ID ' . $post_id . ' в таксономии custom_taxonomy';
}

Добавление терминов без удаления существующих


$post_id = 123;
$terms = array( 'term10', 'term11' );
$result = wp_set_post_terms( $post_id, $terms, 'post_tag', true );
if ( is_wp_error( $result ) ) {
    echo 'Ошибка: ' . $result->get_error_message();
} else {
    echo 'Новые термины успешно добавлены для поста с ID ' . $post_id . ', существующие термины не удалены';
}

Вопросы и ответы

Как добавить термины к посту с помощью функции wp_set_post_terms()?

Функция wp_set_post_terms() используется для установки терминов для поста в WordPress. Она принимает несколько параметров:

  • $post_id (обязательный) — идентификатор поста, для которого нужно установить термины.
  • $terms (необязательный) — массив терминов или строка терминов, разделенных запятыми.
  • $taxonomy (необязательный) — название таксономии, по умолчанию ‘post_tag’.
  • $append (необязательный) — если установлено в true, существующие термины не будут удалены, а только добавлены новые.

Функция возвращает массив идентификаторов таксономий измененных терминов, объект WP_Error в случае ошибки или false в случае неудачи.


$post_id = 42;
$terms = array( 'term1', 'term2', 'term3' );
$taxonomy = 'category';
$append = false;
$result = wp_set_post_terms( $post_id, $terms, $taxonomy, $append );
if ( ! is_wp_error( $result ) ) {
  echo 'Термины успешно добавлены!';
} else {
  echo 'Ошибка при добавлении терминов: ' . $result->get_error_message();
}

Как удалить существующие термины и заменить их новыми с помощью функции wp_set_post_terms()?

Чтобы удалить существующие термины и заменить их новыми, нужно установить параметр $append в значение false. Это приведет к замене существующих терминов новыми.


$post_id = 42;
$terms = array( 'term1', 'term2', 'term3' );
$taxonomy = 'category';
$append = false;
$result = wp_set_post_terms( $post_id, $terms, $taxonomy, $append );
if ( ! is_wp_error( $result ) ) {
  echo 'Термины успешно заменены!';
} else {
  echo 'Ошибка при замене терминов: ' . $result->get_error_message();
}

Как добавить новые термины, не удаляя существующие, с помощью функции wp_set_post_terms()?

Чтобы добавить новые термины, не удаляя существующие, нужно установить параметр $append в значение true. Это приведет к добавлению новых терминов к существующим.


$post_id = 42;
$terms = array( 'term4', 'term5', 'term6' );
$taxonomy = 'category';
$append = true;
$result = wp_set_post_terms( $post_id, $terms, $taxonomy, $append );
if ( ! is_wp_error( $result ) ) {
  echo 'Новые термины успешно добавлены!';
} else {
  echo 'Ошибка при добавлении новых терминов: ' . $result->get_error_message();
}

Как получить список ID терминов, связанных с постом, с помощью функции wp_set_post_terms()?

Для получения списка ID терминов, связанных с постом, с помощью функции wp_set_post_terms(), необходимо передать в качестве аргумента $post_id идентификатор поста, для которого нужно получить термины.

Пример кода:


$post_id = 123;
$terms = wp_get_post_terms( $post_id, 'category', array( 'fields' => 'ids' ) );

Как обработать ошибку при использовании функции wp_set_post_terms()?

Для обработки ошибки при использовании функции wp_set_post_terms() можно воспользоваться условным оператором if, проверяя возвращаемое значение функции.

Пример кода:


$post_id = 123;
$terms = array( 'term1', 'term2' );
$result = wp_set_post_terms( $post_id, $terms, 'category' );
if ( is_wp_error( $result ) ) {
    $error_message = $result->get_error_message();
    echo 'Ошибка: ' . $error_message;
}

Как использовать функцию wp_set_post_terms() с нестандартной таксономией?

Для использования функции wp_set_post_terms() с нестандартной таксономией необходимо передать в качестве аргумента $taxonomy название этой таксономии.

Пример кода:


$post_id = 123;
$terms = array( 'term1', 'term2' );
$taxonomy = 'custom_taxonomy';
wp_set_post_terms( $post_id, $terms, $taxonomy );

Как использовать функцию wp_set_post_terms() для постов с дочерними терминами?

Функция wp_set_post_terms() позволяет устанавливать термины для поста в WordPress. Если вы хотите установить термины, которые являются дочерними для других терминов, вам необходимо передать идентификаторы этих терминов вместо их названий.


$parent_term = get_term_by( 'name', 'Parent Term', 'taxonomy' );
$child_term = get_term_by( 'name', 'Child Term', 'taxonomy' );
if ( $parent_term && $child_term ) {
    $terms = array( $parent_term->term_id, $child_term->term_id );
    wp_set_post_terms( $post_id, $terms, 'taxonomy' );
}

Как использовать функцию wp_set_post_terms() для постов с несколькими таксономиями?

Функция wp_set_post_terms() также позволяет устанавливать термины для поста в нескольких таксономиях. Для этого вам нужно передать массив таксономий и соответствующих терминов.


$terms = array(
    'taxonomy1' => array( 'Term 1', 'Term 2' ),
    'taxonomy2' => array( 'Term 3', 'Term 4' )
);
foreach ( $terms as $taxonomy => $terms_array ) {
    $term_ids = array();
    foreach ( $terms_array as $term_name ) {
        $term = get_term_by( 'name', $term_name, $taxonomy );
        if ( $term ) {
            $term_ids[] = $term->term_id;
        }
    }
    wp_set_post_terms( $post_id, $term_ids, $taxonomy );
}

Как использовать функцию wp_set_post_terms() для постов без указания таксономии?

Если вы хотите установить термины для поста без указания конкретной таксономии, функция wp_set_post_terms() будет использовать таксономию «post_tag» по умолчанию.


$terms = array( 'Term 1', 'Term 2', 'Term 3' );
wp_set_post_terms( $post_id, $terms );

Функция wp_set_post_terms() позволяет устанавливать термины для поста в WordPress. Она может использоваться для установки терминов с дочерними терминами, для постов с несколькими таксономиями и для постов без указания таксономии. Эта функция возвращает массив идентификаторов таксономий, которые были изменены, либо WP_Error или false в случае ошибки.

Связанные элементы

  • Функция wp_get_post_terms(): получает термины, связанные с постом.
  • Функция wp_remove_object_terms(): удаляет термины из объекта.
  • Функция wp_get_object_terms(): получает термины, связанные с объектом.
  • Хук set_object_terms: вызывается после установки терминов для объекта.
  • Хук get_the_terms: вызывается при получении терминов для объекта.
  • Хук delete_term_relationships: вызывается перед удалением связей терминов.
  • Хук pre_get_terms: вызывается перед получением терминов.
  • Хук get_terms: вызывается при получении терминов.
  • Класс WP_Term_Query: используется для выполнения запросов к терминам.
Обсуждение