Вопрос или проблема
Я попытался добавить категорию на основе записи, как показано по этой ссылке:
Как добавить новые категории с помощью 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
третьим параметром говорит системе заменить все существующие категории (если они были назначены ранее).
Проверка и оптимизация:
-
Проверьте существование категорий: Убедитесь, что категории с указанными ID действительно существуют в вашей базе данных.
-
Синтаксис и ошибки: Проверьте, нет ли ошибок в синтаксисе кода. Даже небольшие ошибки могут вызвать некорректное выполнение.
-
Кэширование: Убедитесь, что проблем с кэшированием нет, которые могут привести к тому, что изменения не сразу будут видны.
Этот способ обеспечит корректную привязку категорий к вашему посту и будет надежно работать в любых сценариях, связанных с размещением постов в WordPress.