Как добавить существующие категории в пост с помощью wp_insert_post

Вопрос или проблема

Я попытался добавить категорию на основе записи, как показано по этой ссылке:
Как добавить новые категории с помощью wp_insert_post

Здесь я добавил ‘post_category’ и идентификаторы категорий по умолчанию в массив, как показано ниже:

$my_post = array(
    'post_title'    => 'test',
    'post_content'  => 'hello',
    'post_status'   => 'publish',
    'post_author'   =>  1,
    'post_type'     => 'product',
    'post_category' => array(2,3,4,5)
 );
 $post_id = wp_insert_post($my_post);

Все поля выше были добавлены, кроме post_category. Я хотел добавить более чем одну категорию для каждого продукта, и я использую для этого массив.

В чем, вероятно, заключается проблема?

Вы можете использовать wp_set_object_terms() для назначения терминов таксономии записи.

wp_set_object_terms($post_id, $terms, $taxonomy, true);

Где $terms – отдельный «червь» (slug) термина, отдельный id термина или массив из любых из них. Заменит все существующие связанные термины в этой таксономии.

Смотрите документацию: https://codex.wordpress.org/Function_Reference/wp_set_object_terms

Правка:

В вашем случае это будет выглядеть так:

wp_set_object_terms($post_id, array(2,3,4,5), 'category', true);

Пожалуйста, проверьте на наличие ошибок в синтаксисе.

Ответ или решение

Чтобы добавить существующие категории в пост с использованием функции wp_insert_post, вам необходимо учитывать специфику работы с таксономиями в WordPress, например, с категорией. Несмотря на то что вы указали 'post_category' в массиве $my_post, это не всегда гарантирует корректную привязку категорий к посту при его создании. Рассмотрим, почему и как это исправить.

Проблема с использованием 'post_category'

'post_category', указанный в массиве параметров для wp_insert_post, технически поддерживается, но он часто не работает так, как ожидается, особенно если категории должны быть привязаны к кастомным типам постов, как в вашем случае с 'product'. Это связано с тем, что 'post_category' в основном используется для постов с типом 'post'.

Решение с использованием wp_set_object_terms()

Корректный способ привязки категорий — использование функции wp_set_object_terms(), которая позволяет явно назначить термины таксономии вашему посту. После создания поста с помощью wp_insert_post, вы можете воспользоваться следующим кодом:

// Создаем или обновляем пост
$my_post = array(
    'post_title'    => 'test', // заголовок поста
    'post_content'  => 'hello', // содержание поста
    'post_status'   => 'publish', // статус публикации
    'post_author'   =>  1, // ID автора
    'post_type'     => 'product' // тип поста
);
$post_id = wp_insert_post($my_post);

// Привязываем категории
wp_set_object_terms($post_id, array(2, 3, 4, 5), 'category', true);

Объяснение кода:

  • wp_insert_post($my_post): Эта функция создает новый пост и возвращает его ID. На этом этапе пост еще не имеет привязанных категорий.

  • wp_set_object_terms($post_id, array(2, 3, 4, 5), 'category', true): Эта фукнция задает категории посту. array(2, 3, 4, 5) — это массив ID категорий, которые вы хотите привязать к посту. Аргумент 'category' указывает, что мы работаем с таксономией категорий. Аргумент true третьим параметром говорит системе заменить все существующие категории (если они были назначены ранее).

Проверка и оптимизация:

  1. Проверьте существование категорий: Убедитесь, что категории с указанными ID действительно существуют в вашей базе данных.

  2. Синтаксис и ошибки: Проверьте, нет ли ошибок в синтаксисе кода. Даже небольшие ошибки могут вызвать некорректное выполнение.

  3. Кэширование: Убедитесь, что проблем с кэшированием нет, которые могут привести к тому, что изменения не сразу будут видны.

Этот способ обеспечит корректную привязку категорий к вашему посту и будет надежно работать в любых сценариях, связанных с размещением постов в WordPress.

Оцените материал
Добавить комментарий

Капча загружается...