Для чего используется параметр "meta_input" в функции wp_insert_post()?

30 янв. 2016 г., 15:49:44
Просмотры: 13.7K
Голосов: 10

Я добавляю записи в 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" и не нашел никаких результатов.

0
Все ответы на вопрос 2
1

Эта часть 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) скроет его из метабокса произвольных полей на экране редактирования записи.

30 янв. 2016 г. 16:02:38
Комментарии

О, WordPress, на котором я тестирую, версии 4.3, большое спасибо.

streel streel
30 янв. 2016 г. 16:15:43
0

Я делаю это через 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);   
}
16 янв. 2019 г. 01:55:55