Afisarea termenilor pentru postări personalizate
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.
Codul tău este greșit. Nu știu cum funcționează pe localhost-ul tău. Motivul -
- Apelezi
get_terms()cu 3 parametri, dar această funcție acceptă doar 2 parametri. Ultimul este în plus. - Î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ă.
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
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
Poți să clarifici ce încerci să realizezi? Ar fi mai bine să editezi întrebarea și să o clarifici mai mult! @rosh8111
CodeMascot
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
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
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
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
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
[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
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.