¿Para qué se usa el parámetro "meta_input" en wp_insert_post()?
Estoy insertando una publicación en WordPress usando la función wp_insert_post().
Quiero insertar algunos campos personalizados en cada publicación y leyendo la documentación pensé que el parámetro meta_info se usaba para eso, intenté algo como esto:
$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" ) // Campos personalizados
);
$postID = wp_insert_post( $data );
La publicación se inserta correctamente y las etiquetas también. Pero no se agregan campos personalizados. Sé que podría usar add_post_meta() para agregarlos, pero aún me gustaría saber para qué sirve el parámetro meta_input, porque hice una búsqueda en la base de datos de "testx1" después de insertar la publicación y no encontré ningún resultado.

Esta parte de wp_insert_posts()
lo revela:
if ( ! empty( $postarr['meta_input'] ) ) {
foreach ( $postarr['meta_input'] as $field => $value ) {
update_post_meta( $post_ID, $field, $value );
}
}
donde vemos cómo los campos meta del post se actualizan/agregan con update_post_meta()
.
Aquí está la descripción en línea para meta_input
:
Array de valores meta del post indexados por su clave meta. Vacío por defecto.
Esto fue añadido en WordPress 4.4 y aquí está el ticket relevante #20451 para más información.
Nota que usando el guión bajo al principio de la clave meta _test
la ocultará del metabox de campos personalizados en la pantalla de edición del post.

La forma en que lo hago es mediante term_id en lugar del slug y funciona:
//insertar elementos de Arte en la base de datos
$arr = array('item 1', 'item 2');
// $arr = array('art item 1', 'art item 2');
foreach ($arr as $a) {
wp_insert_post(array(
//esenciales
//'ID' => 1131,
'post_author' => 1,
'post_title' => $a,
'post_type' => 'post',
'post_content' => 'Algo...',
'post_status' => 'publish',
'post_name' => 'nombre-del-post',
'meta_input' => array( //(array) Array de valores meta del post indexados por su clave meta. Vacío por defecto.
'city' => '',// 'name' => $post['name']
'country' => ''// 'city' => $post['city']
),
'tax_input' => array(
'category' => array(33,32), //los números de id funcionan, los slugs tienden a ser ignorados !!!
'post_tag' => array('one', 'two') //para etiquetas los slugs parecen funcionar
),//(array) Array de términos de taxonomía indexados por su nombre de taxonomía. Vacío por defecto. Equivalente a llamar a wp_set_post_terms() / wp_set_object_terms()
//'tags_input' => array('una', 'trei'), //(array) Array de nombres de etiquetas, slugs o IDs. Vacío por defecto. Equivalente a llamar a wp_set_post_tags().
), true);
}
