Aggiungere termini in modo programmatico ai custom post type
Quello che voglio fare è assegnare un termine gerarchico a un custom post type:
function create_frontles_posts() {
$x = 1;
do {
$post_id = wp_insert_post(array(
'comment_status' => 'closed', // Stato commenti chiuso
'ping_status' => 'closed', // Pingback disabilitati
'post_author' => 1, // ID autore
'post_name' => 'Tile'.$x, // Slug del post
'post_title' => 'Tile', // Titolo del post
'post_status' => 'publish', // Post pubblicato
'post_type' => 'frontiles', // Tipo di post personalizzato
));
wp_set_object_terms($post_id, array('mosaic-home'), 'tiles_categories', true); // Assegna il termine
$x++;
} while ($x <= 24);
}
Riesco a creare automaticamente i 24 custom post ma non riesco ad assegnare loro il termine durante questo processo. In precedenza, ho creato il termine con questa funzione, senza problemi:
function example_insert_category() {
wp_insert_term(
'Mosaic - Home', // Nome del termine
'tiles_categories', // Tassonomia
array(
'description' => 'Aggiungi Tile qui per caricarli nel primo termine', // Descrizione
'slug' => 'mosaic-home' // Slug
)
);
}
add_action('init','example_insert_category'); // Esegui all'inizializzazione
Cosa sto sbagliando?

Ho scoperto il problema e la soluzione. Ho eseguito il debug di "wp_set_object_terms" utilizzando "is_wp_error" e ho ricevuto il messaggio "Invalid Taxonomy", poi ho capito che quando i post venivano creati quel termine non esisteva. Quindi ho cambiato l'hook in "init" nella funzione programmatically_create_post(), e voilà!
Sotto questa riga il codice funzionante:
<?php
// DA FARE QUANDO IL TEMA È ATTIVATO ///////////////////////
if (isset($_GET['activated']) && is_admin()){
// 3. Aggiungi il termine "mosaic-home" alla tassonomia personalizzata "tiles_categories"
function example_insert_category() {
wp_insert_term(
'Mosaic - Home',
'tiles_categories',
array(
'description' => 'Aggiungi Tile qui per caricarli nel primo termine',
'slug' => 'mosaic-home'
)
);
}
add_action('init','example_insert_category');
// 4. Crea un loop per generare 24 post
function create_frontles_posts() {
$x = 1;
do {
$post_id = wp_insert_post(array(
'comment_status' => 'closed',
'ping_status' => 'closed',
'post_author' => 1,
'post_name' => 'tile'.$x,
'post_title' => 'Tile',
'post_status' => 'publish',
'post_type' => 'frontiles',
// 'tax_input' => array('tiles_categories' => 2),
));
wp_set_object_terms($post_id, 'mosaic-home', 'tiles_categories', true);
$x++;
} while ($x <= 24);
}
// 5. Aggiungi il loop alla funzione per creare i post
function programmatically_create_post() {
// Inizializza l'ID della pagina a -1. Indica che nessuna azione è stata eseguita.
$post_id = -1;
$title='';
// Se la pagina non esiste già, allora creala
if( null == get_page_by_title( $title ) ) {
create_frontles_posts();
} else {
// Altrimenti, ci fermiamo
$post_id = -2;
}
}
add_filter( 'init', 'programmatically_create_post' );
} // fine delle azioni da eseguire all'attivazione
?>

Ecco un esempio. Ho cercato di spiegare ogni processo che avviene in ogni riga. Spero che questo codice possa spiegarti facilmente come funziona.
<?php
//creazione di un array vuoto per memorizzare gli ID dei termini inseriti
$terms = array();
//inserimento del termine "Kathmandu" nella tassonomia personalizzata "region"
$tax_insert_id = wp_insert_term('Kathmandu','region' );
//se il termine "Kathmandu" viene inserito con successo, viene restituito il suo term_id e memorizzato in $tax_insert_id
//il term_id restituito viene aggiunto all'array $terms
$terms[] = $tax_insert_id['term_id'];
//inserimento del termine "Banepa" nella tassonomia personalizzata "region"
$tax_insert_id = wp_insert_term('Banepa','region' );
//se il termine "Banepa" viene inserito con successo, viene restituito il suo term_id e memorizzato in $tax_insert_id
//il term_id restituito viene aggiunto all'array $terms
$terms[] = $tax_insert_id['term_id'];
//Creazione di un array per il post
$post = array(
'post_title' => 'Titolo',
'post_content' => 'Questo è un testo di esempio',
'post_status' => 'publish',
'post_type' => 'post',
);
//Inserimento del post in WordPress usando wp_insert_post()
//se il post viene pubblicato con successo, viene restituito il post_id e memorizzato in $the_post_id
$the_post_id = wp_insert_post( $post );
//assegna i termini memorizzati nell'array $terms al post con ID $the_post_id
wp_set_post_terms( $the_post_id, $terms, 'region' );

Grazie Karun! Ma sto provando a testarlo e ho questo errore PHP "Errore fatale: Non è possibile utilizzare un oggetto di tipo WP_Error come array in..." in questa riga: $terms[] = $tax_insert_id['term_id'];

Puoi vedere come appare ora l'intero codice qui: http://pastebin.com/embed_iframe.php?i=gxp71NLt
