Visualizzare termini per tipi di post personalizzati

30 mag 2017, 16:15:47
Visualizzazioni: 18.3K
Voti: 0

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?

0
Tutte le risposte alla domanda 2
13

Il tuo codice è sbagliato. Non so come funzioni sul tuo localhost. Motivo-

  1. Stai chiamando get_terms() con 3 parametri quando in realtà ne accetta solo 2. L'ultimo è superfluo.
  2. 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.

30 mag 2017 16:38:20
Commenti

puoi mostrarmi lo script da usare.

Roshan Deshapriya Roshan Deshapriya
30 mag 2017 16:39:34

Hai visitato il link? @rosh8111

CodeMascot CodeMascot
30 mag 2017 16:40:15

Grazie, controllerò il codex e ti farò sapere se funziona, grazie per avermelo segnalato. - @the_dramatist

Roshan Deshapriya Roshan Deshapriya
30 mag 2017 20:35:27

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 Roshan Deshapriya
30 mag 2017 23:51:42

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

CodeMascot CodeMascot
31 mag 2017 00:48:38

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 Roshan Deshapriya
31 mag 2017 01:22:38

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 CodeMascot
31 mag 2017 07:42:28

@rosh8111 dai un'occhiata alla risposta aggiornata.

CodeMascot CodeMascot
31 mag 2017 07:51:06

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 Roshan Deshapriya
31 mag 2017 07:56:12

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 Roshan Deshapriya
31 mag 2017 10:36:07

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 CodeMascot
31 mag 2017 11:30:24

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

Roshan Deshapriya Roshan Deshapriya
31 mag 2017 12:18:17

Ovviamente questo non restituirebbe nulla. Devi passare l'ID del post a $post_id. Nel tuo caso presumo che $post_id sia vuoto. Puoi ottenere l'ID del post da global $post e poi $post->ID.

CodeMascot CodeMascot
31 mag 2017 12:31:47
Mostra i restanti 8 commenti
0

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.

31 mag 2017 13:46:19