Aggiungere termini in modo programmatico ai custom post type

15 dic 2014, 19:24:25
Visualizzazioni: 18.2K
Voti: 2

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?

2
Commenti

Credo che questo problema sia correlato a http://wordpress.stackexchange.com/questions/18236/attaching-taxonomy-data-to-post-with-wp-insert-post

Karun Karun
15 dic 2014 20:18:04

Grazie Karun ma non riesco a vedere la soluzione in quella domanda. Ho bisogno che funzioni..., la mia conoscenza di php è basica..., faccio fatica a imparare. A volte mi perdo in queste cose

Dedalos01 Dedalos01
16 dic 2014 13:44:19
Tutte le risposte alla domanda 2
0

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
?>
17 dic 2014 15:10:23
3

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' );
16 dic 2014 14:40:06
Commenti

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'];

Dedalos01 Dedalos01
16 dic 2014 19:42:55

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

Dedalos01 Dedalos01
16 dic 2014 19:51:21

Funziona bene. Ma potresti spiegare un po' come creare più post sotto termini diversi?

Shiplu Shiplu
29 apr 2022 12:18:16