Для чего используется параметр "meta_input" в функции wp_insert_post()?
Я добавляю записи в WordPress с помощью функции wp_insert_post().
Мне нужно добавить произвольные поля к каждой записи, и из документации я понял, что для этого используется параметр meta_input. Я попробовал сделать так:
$data = array(
'post_author' => 1,
'post_status' => 'publish',
'post_title' => $post->getTitle(),
'post_content' => $post->getContent(),
'post_category' => $post->getCategory(),
'tags_input' => $post->getTags(),
'meta_input' => array( "_test" => "testx1" )
);
$postID = wp_insert_post( $data );
Запись добавляется корректно, теги тоже работают. Но произвольные поля не добавляются. Я знаю, что можно использовать add_post_meta() для их добавления, но мне все же интересно, для чего нужен параметр meta_input, потому что после добавления записи я искал в базе данных "testx1" и не нашел никаких результатов.

Эта часть wp_insert_posts()
раскрывает суть:
if ( ! empty( $postarr['meta_input'] ) ) {
foreach ( $postarr['meta_input'] as $field => $value ) {
update_post_meta( $post_ID, $field, $value );
}
}
где мы видим, как обновляются/добавляются метаполя записи с помощью update_post_meta()
.
Вот встроенное описание для meta_input
:
Массив значений метаполей записи, где ключи массива соответствуют ключам метаполей. По умолчанию пустой.
Эта возможность была добавлена в WordPress 4.4, и более подробную информацию можно найти в соответствующем тикете #20451.
Обратите внимание, что использование символа подчеркивания перед ключом метаполя (например, _test
) скроет его из метабокса произвольных полей на экране редактирования записи.

Я делаю это через term_id, а не через slug, и это работает:
// Вставляем элементы Art в базу данных
$arr = array('Элемент 1', 'Элемент 2');
// $arr = array('Элемент art 1', 'Элемент art 2');
foreach ($arr as $a) {
wp_insert_post(array(
// Основные параметры
//'ID' => 1131,
'post_author' => 1,
'post_title' => $a,
'post_type' => 'post',
'post_content' => 'Текст...',
'post_status' => 'publish',
'post_name' => 'название-поста',
'meta_input' => array( //(array) Массив мета-значений записи, где ключ - это ключ мета-поля. По умолчанию пустой.
'city' => '',// 'name' => $post['name']
'country' => ''// 'city' => $post['city']
),
'tax_input' => array(
'category' => array(33,32), // ID работают, slugs часто игнорируются !!!
'post_tag' => array('один', 'два') // Для тегов slugs, кажется, работают
),//(array) Массив таксономий, где ключ - название таксономии. По умолчанию пустой. Эквивалентно вызову wp_set_post_terms() / wp_set_object_terms()
//'tags_input' => array('один', 'три'), //(array) Массив названий тегов, их slugs или ID. По умолчанию пустой. Эквивалентно вызову wp_set_post_tags().
), true);
}
