Afisarea termenilor pentru postări personalizate

30 mai 2017, 16:15:47
Vizualizări: 18.3K
Voturi: 0

Am reușit să afișez toți termenii aparținând unei taxonomii personalizate folosind codul de mai jos:

$args = array('post_type' => 'my_post_type','number' => '999');
$terms = get_terms( 'my_taxo',
          [
            'hide_empty' => true,
            'orderby' => 'wpse_last_word',
          ] , $args );

foreach ( $terms as $term ) { 
    echo '' . $term->name . ''; 
}

Acest cod oferă rezultatele dorite pe localhost-ul meu (xampp). Practic, afișează toți termenii asociați unei anumite postări. Dar când încarc codul pe un server live, codul nu mai funcționează cum trebuie. În schimb, afișează toți termenii fără să-i filtreze. Am actualizat chiar și versiunea PHP pe serverul live să se potrivească cu cea de pe serverul local; tot fără succes.

Poate cineva să-mi indice problema din codul meu.

0
Toate răspunsurile la întrebare 2
13

Codul tău este greșit. Nu știu cum funcționează pe localhost-ul tău. Motivul -

  1. Apelezi get_terms() cu 3 parametri, dar această funcție acceptă doar 2 parametri. Ultimul este în plus.
  2. În al doilea rând, get_terms() returnează toți termenii unei taxonomii, nu termenii asociați cu un anumit post.

Pentru a obține termenii asociați unui post, poți folosi wp_get_post_terms.

Utilizarea wp_get_post_terms în interiorul loop-ului WordPress:

Pentru fiecare post, vei obține termenii acestuia apelând wp_get_post_terms astfel:

//Fă ceva dacă o valoare specifică există în array-ul postului
$term_list = wp_get_post_terms($post->ID, 'taxonomia_ta', array("fields" => "all"));
// Apoi poți rula un foreach pentru a afișa termenii taxonomiei
foreach($term_list as $term_single) {
    echo $term_single->slug; //fă ceva aici
}

Și pentru afara loop-ului:

// Fă ceva dacă o valoare specifică există în array-ul postului
// Și ai nevoie să obții ID-ul postului pentru a-l pasa mai departe
$term_list = wp_get_post_terms($post_id, 'taxonomia_ta', array("fields" => "all"));
// Apoi poți rula un foreach pentru a afișa termenii taxonomiei
foreach($term_list as $term_single) {
    echo $term_single->slug; //fă ceva aici
}

Sper că te ajută.

30 mai 2017 16:38:20
Comentarii

poți să-mi arăți scriptul pe care să-l folosesc.

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

Ai vizitat linkul? @rosh8111

CodeMascot CodeMascot
30 mai 2017 16:40:15

Mulțumesc, voi verifica codex-ul și îți voi spune dacă funcționează, mulțumesc că mi-ai atras atenția. - @the_dramatist

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

Salut, am testat toate scripturile posibile și nu reușesc să obțin numele termenilor pentru postările care aparțin unui CPT. Poți fi atât de amabil să publici codul care face magia? Te rog să ții cont că codul meu este în afara loop-ului. Momentan folosesc:
$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 mai 2017 23:51:42

Poți să clarifici ce încerci să realizezi? Ar fi mai bine să editezi întrebarea și să o clarifici mai mult! @rosh8111

CodeMascot CodeMascot
31 mai 2017 00:48:38

OK, am un tip de postare personalizat numit "projects", în care am creat o taxonomie numită "Clients", unde voi introduce clienții în backend. Deci de fiecare dată când un proiect este publicat, voi selecta un client pe care vreau să-l afișez în front-end.

Roshan Deshapriya Roshan Deshapriya
31 mai 2017 01:22:38

Deci, trebuie să afișezi termenii asociați unui singur articol, corect? Și în interiorul buclei WordPress sau în afara buclei WordPress? Dacă în afara buclei, atunci în ce șablon single.php sau archive.php?

CodeMascot CodeMascot
31 mai 2017 07:42:28

@rosh8111 verifică răspunsul actualizat.

CodeMascot CodeMascot
31 mai 2017 07:51:06

Am propriul meu șablon personalizat, de fapt această pagină se încarcă într-o pagină single.php personalizată asociată cu un tip de postare personalizat. Te voi actualiza cu rezultatele, mulțumesc pentru ajutor.

Roshan Deshapriya Roshan Deshapriya
31 mai 2017 07:56:12

Am verificat codul pe care mi l-ai dat, dar din păcate nu returnează niciun rezultat, doar gol. Am încercat chiar și cu query post. Nimic..

Roshan Deshapriya Roshan Deshapriya
31 mai 2017 10:36:07

Mai întâi înlocuiește your_taxonomy cu numele taxonomiei tale clients. Apoi fă un print_r($term_list) și postează rezultatul aici împreună cu un screenshot din pagina de administrare a taxonomiei personalizate. @rosh8111

CodeMascot CodeMascot
31 mai 2017 11:30:24

[link]http://pad10.net/assets/tax_error.jpg, găsiți atașat screenshot-ul cu configurația mea și rezultatele pe care le obțin.

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

Evident, acest lucru nu va returna nimic. Trebuie să transmiți ID-ul postării la $post_id. În cazul tău, $post_id este gol, cred. Poți obține ID-ul postării din global $post apoi $post->ID.

CodeMascot CodeMascot
31 mai 2017 12:31:47
Arată celelalte 8 comentarii
0

După câteva cercetări, am găsit scriptul de mai jos care face treaba, mulțumesc @the_dramatist pentru că m-a îndreptat în direcția corectă. Am folosit global $post, dar nu într-un mod corect.


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;

Dacă cineva obține rezultate goale după aceasta, ștergeți categoriile și recreați-le, apoi aplicați-le din nou.

31 mai 2017 13:46:19