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

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

Puoi chiarire cosa stai cercando di ottenere? Sarebbe meglio se modificassi la domanda e la rendessi più chiara! @rosh8111

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.

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
?

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.

Ho controllato il codice che mi hai fornito, temo che non stia recuperando alcun risultato, semplicemente vuoto. Ho provato anche con query post. Niente..

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

[link]http://pad10.net/assets/tax_error.jpg, trovi allegato lo screenshot della mia configurazione e i risultati che ottengo.

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.
