Încerc să listez termenii unei taxonomii personalizate folosind get_categories
Folosesc acest fragment de cod pentru a încerca să listez termenii unei taxonomii personalizate pentru a fi utilizați într-un select box al unui meta box, dar nu afișează nimic când îl implementez (deși funcționează cu taxonomia implicită 'category').
$partners = array();
$partners_obj = get_categories(array('taxonomy' => 'partner-cat'));
$partners[''] = '-';
foreach ($partners_obj as $partner) {
$partners[$partner->cat_ID] = $partner->cat_name;;
}
După cum vezi, taxonomia mea personalizată este 'partner-cat' și există postări într-un tip de postare personalizată în 2 termeni separați ai acestei taxonomii.
Orice ajutor ar fi foarte apreciat.
get_categories()
preia taxonomiile de tip 'categorii' în special http://core.trac.wordpress.org/browser/tags/3.6/wp-includes/category.php#L0, pentru a prelua o taxonomie personalizată ar trebui să folosești get_terms() în schimb, aici http://codex.wordpress.org/Function_Reference/get_terms
$terms = get_terms( 'partner-cat', 'orderby=count&hide_empty=0' );
$count = count($terms);
if ( $count > 0 ){
echo "<ul>";
foreach ( $terms as $term ) {
echo "<li>" . $term->name . "</li>";
}
echo "</ul>";
}
Asigură-te că ai specificat corect slug-ul pe care l-ai înregistrat pentru taxonomie și schimbă WP_DEBUG pe true în fișierul tău de configurare pentru a verifica eventuale erori, deoarece este posibil să încerci să preiei taxonomia înainte de a o înregistra și de aceea să nu obții rezultate - în acest caz ai primi o eroare.
poți să lipesc codul tău pentru înregistrarea taxonomiei?
Nici măcar nu m-am gândit la asta! Includeam funcția pentru meta box ÎNAINTE de funcția mea pentru taxonomie personalizată. Le-am inversat și acum funcționează perfect. Mulțumesc!
Poisontonomes
Sunt termenii taxonomiei tăi goi? Nu vor fi afișați în mod implicit. Ai putea încerca să folosești:
$partners_obj = get_terms( 'partner-cat', array('hide_empty' => false) );
Reține că get_categories() utilizează get_term() pentru a obține termenii tăi.
Bucla ta foreach nu este corectă. Ar trebui să accesezi term_id și name în schimb.
foreach ($partners_obj as $partner) {
$partners[$partner->term_id] = $partner->name;
}
Codul complet:
$partners = array();
$partners_obj = get_terms( 'taxo-name-here', array('hide_empty' => false) );
echo '<pre>' . print_r( $partners_obj, true ) . '</pre>';
echo '<hr>';
$partners[''] = '-';
foreach ($partners_obj as $partner) {
$partners[$partner->term_id] = $partner->name;;
}
echo '<pre>' . print_r( $partners, true ) . '</pre>';
Nu, ambele au postări în ele. get_terms( 'partner-cat', array('hide_empty' => false) ); nu a funcționat nici el... Este ciudat pentru că funcționează bine cu categoriile implicite de postări
Poisontonomes
Am încercat și asta și încă nu merge, deși a aruncat o eroare care îmi spunea că taxonomia este invalidă... Am verificat de două și de trei ori numele și este corect, așa că nu știu de ce se întâmplă asta
Poisontonomes
get_terms returnează wP_Error când taxonomia nu există. Poți încerca cu altă taxonomie? Cum o creezi pe aceasta? Prin cod sau plugin?
RRikesh
Tocmai am încercat cu o altă taxonomie personalizată, aceeași eroare. Apoi am încercat cu cea implicită "category" și a funcționat. Ambele taxonomii personalizate există și ambele au postări... O creez manual prin cod, fără plugin
Poisontonomes
Am rezolvat. În final a fost o soluție simplă, @dot1 m-a condus să verific ce funcție apelam prima dată și tot ce a trebuit să fac a fost să pun funcția mea de taxonomie personalizată prima și acum totul funcționează cum trebuie. Mulțumesc pentru ajutor.
Poisontonomes
Dacă folosești Post Types Personalizate (CPT) și presupun că ai creat o taxonomie personalizată pentru acel tip de post, să spunem:
Ai un CPT numit Produse și o taxonomie CPT numită Categorii de Produse
Dacă încerci să afișezi CPTaxonomy în pagina ta de produnde undeva în loop, aș sugera să folosești această funcție conform WP codex:
http://codex.wordpress.org/Function_Reference/get_terms
Codul pentru a obține CPTaxonomy pentru CPType, ambele numite products, ar trebui să fie următorul:
$categories = get_terms( 'products', 'orderby=count&hide_empty=0' );
Apoi, pentru afișarea taxonomiilor, folosește acest cod:
<?php foreach($categories as $category):
print $category->slug;print $category->name;
?>
Doar un sfat, mai bine folosește variabile precum $terms și $term când lucrezi cu funcții legate de termeni, cum ar fi get_terms. Este mai puțin confuz decât să folosești o variabilă precum $categories :-)
Pieter Goosen
Modul WordPress:
$categories = (array) get_terms('partner-cat', array('hide_empty' => false));
foreach (array_keys($categories) as $k)
{
_make_cat_compat($categories[$k]);
}
Aceasta utilizează implementarea directă pe care WordPress o folosește în funcția get_categories() situată în wp_includes\category.php
<?php
$args = array(
'type' =>'',//opțional
'number' => '',
'hide_empty' => 0,
'taxonomy' => 'product_cat' //numele taxonomiei personalizate
);
$categories = get_categories($args);
//echo "<pre>"; print_r($categories);
foreach($categories as $cat){
$catid = $cat->term_id;
$thumbnail_id = get_woocommerce_term_meta($catid, 'thumbnail_id', true );
$image = wp_get_attachment_url( $thumbnail_id );
$catname = $cat->name;
$catpage = $cat->slug;
?>