Î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!

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

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

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?

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

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.

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
:-)

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;
?>
