Visualizzare termini per tipi di post personalizzati
Sono riuscito a visualizzare tutti i termini appartenenti a una tassonomia personalizzata utilizzando il codice seguente:
$args = array('post_type' => 'my_post_type','number' => '999');
$terms = get_terms( 'my_taxo',
[
'hide_empty' => true, // Nascondi termini vuoti
'orderby' => 'wpse_last_word', // Ordina per ultima parola
] , $args );
foreach ( $terms as $term ) {
// Visualizza il nome del termine
echo '' . $term->name . '';
}
Questo codice fornisce i risultati che desidero sul mio localhost (xampp). Fondamentalmente, visualizza tutti i termini assegnati a un particolare post. Ma quando carico il codice su un server live, il codice non funziona più come previsto. Invece, mostra tutti i termini senza filtrarli. Ho persino aggiornato la versione PHP sul mio server live per farla corrispondere a quella del server locale; senza successo.
Qualcuno può indicarmi il problema nel mio codice?
Il tuo codice è sbagliato. Non so come funzioni sul tuo localhost. Motivo-
- Stai chiamando
get_terms()con 3 parametri quando in realtà ne accetta solo 2. L'ultimo è superfluo. - In secondo luogo,
get_terms()restituisce tutti i termini di una tassonomia, non i termini associati a un post.
Per ottenere i termini associati a un post puoi usare wp_get_post_terms.
Utilizzo di wp_get_post_terms all'interno del loop di WordPress-
Per ogni post otterrai i termini del post chiamando wp_get_post_terms come segue-
//Fai qualcosa se un valore specifico dell'array esiste all'interno di un post
$term_list = wp_get_post_terms($post->ID, 'your_taxonomy', array("fields" => "all"));
// Poi puoi eseguire un foreach loop per mostrare i termini della tassonomia.
foreach($term_list as $term_single) {
echo $term_single->slug; //fai qualcosa qui
}
E per l'esterno del loop-
// Fai qualcosa se un valore specifico dell'array esiste all'interno di un post
// E in qualche modo devi ottenere l'ID del post per passarlo qui sotto.
$term_list = wp_get_post_terms($post_id, 'your_taxonomy', array("fields" => "all"));
// Poi puoi eseguire un foreach loop per mostrare i termini della tassonomia.
foreach($term_list as $term_single) {
echo $term_single->slug; //fai qualcosa qui
}
Spero sia d'aiuto.
Grazie, controllerò il codex e ti farò sapere se funziona, grazie per avermelo segnalato. - @the_dramatist
Roshan Deshapriya
Ciao, ho testato tutti gli script disponibili ma nessuno restituisce i nomi dei termini del post che appartiene al CPT. Potresti essere così gentile da pubblicare il codice che fa la magia? Tieni presente che il mio codice è fuori dal loop, attualmente sto usando:
$args = array('post_type' => 'projects','number' => '1');
$terms = wp_get_post_terms($post_id, 'Client',array("fields" => "names"), $args);
foreach( $terms as $term ){
echo '<h5>' . $term->name . '</h5>'; }
Roshan Deshapriya
Puoi chiarire cosa stai cercando di ottenere? Sarebbe meglio se modificassi la domanda e la rendessi più chiara! @rosh8111
CodeMascot
Ok, ho un custom post type chiamato "projects", in cui ho creato una tassonomia chiamata "Clients", dove inserirò i clienti nel backend. Quindi ogni volta che un progetto viene pubblicato, selezionerò un cliente che voglio mostrare nel frontend.
Roshan Deshapriya
Quindi, hai bisogno di mostrare i termini associati a un singolo post, giusto? E all'interno del ciclo WordPress o al di fuori del ciclo WordPress? Se al di fuori del ciclo, in quale template single.php o archive.php?
CodeMascot
Ho il mio template personalizzato, in realtà questa pagina viene caricata in una pagina custom single.php associata a un custom post type. Ti aggiornerò con i risultati, grazie per l'assistenza.
Roshan Deshapriya
Ho controllato il codice che mi hai fornito, temo che non stia recuperando alcun risultato, semplicemente vuoto. Ho provato anche con query post. Niente..
Roshan Deshapriya
Prima sostituisci your_taxonomy con il nome della tua tassonomia clients. Poi fai un print_r($term_list) e pubblica qui il risultato con uno screenshot della pagina admin della tua tassonomia personalizzata. @rosh8111
CodeMascot
[link]http://pad10.net/assets/tax_error.jpg, trovi allegato lo screenshot della mia configurazione e i risultati che ottengo.
Roshan Deshapriya
Dopo alcune ricerche ho trovato lo script qui sotto che fa al caso mio, grazie a @the_dramatist per avermi indirizzato nella giusta direzione. Avevo usato global $post, ma non nel modo corretto
global $post;
$loop = new WP_Query(array('post_type' => 'myCPT', 'posts_per_page' => -1));
while ($loop->have_posts()) : $loop->the_post();
$terms = wp_get_post_terms($post->ID, 'my_taxonomy');
foreach($terms as $term_single) {
echo '' . $term_single->slug. '';
}
endwhile;
Se qualcuno ottiene risultati vuoti dopo questo script, basta eliminare le categorie e ricrearle e riapplicarle.