A cosa serve il parametro "meta_input" in wp_insert_post()?
Sto inserendo alcuni post in WordPress utilizzando la funzione wp_insert_post().
Voglio aggiungere alcuni campi personalizzati a ciascun post e leggendo la documentazione ho pensato che il parametro meta_info fosse utilizzato per questo scopo. Ho provato qualcosa del genere:
$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 );
Il post viene inserito correttamente e anche i tag. Ma non vengono aggiunti campi personalizzati. So che potrei usare add_post_meta() per aggiungerli ma vorrei comunque sapere a cosa serve il parametro meta_input, perché ho cercato "testx1" nel database dopo aver inserito il post e non ho trovato alcun risultato.

Questa parte di wp_insert_posts()
lo rivela:
if ( ! empty( $postarr['meta_input'] ) ) {
foreach ( $postarr['meta_input'] as $field => $value ) {
update_post_meta( $post_ID, $field, $value );
}
}
dove vediamo come i campi meta dei post vengono aggiornati/aggiunti con update_post_meta()
.
Ecco la descrizione inline per meta_input
:
Array di valori meta dei post indicizzati per la loro chiave meta. Predefinito vuoto.
Questa funzionalità è stata aggiunta in WordPress 4.4 e qui trovi il ticket rilevante #20451 per maggiori informazioni.
Nota che usando l'underscore davanti alla chiave meta, come _test
, questa verrà nascosta dal metabox campi personalizzati nella schermata di modifica del post.

Il modo in cui lo faccio è tramite term_id e non slug e funziona:
//inserisce gli elementi Art nel database
$arr = array('item 1', 'item 2');
// $arr = array('art item 1', 'art item 2');
foreach ($arr as $a) {
wp_insert_post(array(
//essenziali
//'ID' => 1131,
'post_author' => 1,
'post_title' => $a,
'post_type' => 'post',
'post_content' => 'Qualcosa...',
'post_status' => 'publish',
'post_name' => 'nome del post',
'meta_input' => array( //(array) Array di valori meta del post indicizzati per chiave meta. Default vuoto.
'city' => '',// 'nome' => $post['nome']
'country' => ''// 'città' => $post['città']
),
'tax_input' => array(
'category' => array(33,32), //i numeri ID funzionano, gli slug tendono ad essere ignorati !!!
'post_tag' => array('uno', 'due') //per i tag gli slug sembrano funzionare
),//(array) Array di termini tassonomici indicizzati per nome tassonomia. Default vuoto. Equivalente a chiamare wp_set_post_terms() / wp_set_object_terms()
//'tags_input' => array('una', 'tre'), //(array) Array di nomi, slug o ID dei tag. Default vuoto. Equivalente a chiamare wp_set_post_tags().
), true);
}
