Come elencare i termini di una tassonomia personalizzata usando get_categories
Sto usando questo piccolo frammento di codice per provare a elencare i termini di una tassonomia personalizzata da utilizzare in una select box di un meta box, ma non mostra nulla quando lo implemento (nonostante funzioni con la tassonomia predefinita 'category')
$partners = array();
$partners_obj = get_categories(array('taxonomy' => 'partner-cat'));
$partners[''] = '-';
foreach ($partners_obj as $partner) {
$partners[$partner->cat_ID] = $partner->cat_name;;
}
Come puoi vedere, la mia tassonomia personalizzata è 'partner-cat' e ci sono post in un custom post type in 2 termini separati di questa tassonomia.
Ogni aiuto sarebbe molto apprezzato.

get_categories()
recupera le tassonomie di tipo 'categorie' in particolare http://core.trac.wordpress.org/browser/tags/3.6/wp-includes/category.php#L0, per recuperare una tassonomia personalizzata dovresti usare get_terms() invece, qui 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>";
}
Assicurati di specificare lo slug corretto che hai registrato per la tassonomia e imposta WP_DEBUG a true nel tuo file di configurazione per verificare eventuali errori, poiché potresti star cercando di recuperare la tassonomia prima di averla registrata e quindi non otterresti risultati (in quel caso riceveresti un errore).
Puoi incollare il tuo codice per la registrazione della tassonomia?

Non ci avevo nemmeno pensato! Stavo includendo la funzione del meta box PRIMA della mia funzione di tassonomia personalizzata. Le ho invertite e ora funziona perfettamente. Grazie!

I tuoi termini di tassonomia sono vuoti? Non verranno visualizzati per impostazione predefinita. Potresti provare a utilizzare:
$partners_obj = get_terms( 'partner-cat', array('hide_empty' => false) );
Nota che get_categories()
utilizza get_term()
per recuperare i tuoi termini.
Anche il tuo foreach
non è corretto. Dovresti accedere a term_id
e name
invece.
foreach ($partners_obj as $partner) {
$partners[$partner->term_id] = $partner->name;
}
Codice completo:
$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>';

No, entrambi contengono post. get_terms( 'partner-cat', array('hide_empty' => false) );
non ha funzionato neanche... È strano perché funziona perfettamente con le categorie di post predefinite

Ho provato anche quello ma ancora niente, anche se ha generato un errore dicendo che la tassonomia non era valida... Ho controllato due e tre volte il nome ed è corretto, quindi non capisco perché succeda questo

get_terms
restituisce wP_Error
quando la tassonomia non esiste. Potresti provare con un'altra tassonomia? Come stai creando questa? Codice o plugin?

Ho appena provato con un'altra tassonomia personalizzata, stesso errore. Poi ho provato con quella predefinita "category" e ha funzionato. Entrambe le tassonomie personalizzate esistono e hanno post... La sto codificando manualmente, senza plugin

Puoi mostrare il codice che hai usato per la tassonomia? Aggiungilo alla tua domanda

Risolto. Alla fine era una correzione semplice, @dot1 mi ha fatto controllare quale funzione stavo recuperando prima e tutto ciò che dovevo fare era mettere la mia funzione di tassonomia personalizzata per prima e ora funziona tutto come dovrebbe. Grazie per l'aiuto

Se stai utilizzando Custom Post Types (CPT) e presumo che tu abbia creato una tassonomia personalizzata per quel tipo di post personalizzato, diciamo:
Hai un CPT chiamato Prodotti e una CPTaxonomy chiamata Categorie Prodotti
Se stai cercando di visualizzare la CPTaxonomy nella tua pagina prodotti, da qualche parte nel loop, ti suggerirei di usare questa funzione secondo il codice WP:
http://codex.wordpress.org/Function_Reference/get_terms
il codice per ottenere la CPTaxonomy per il CPType entrambi chiamati prodotti dovrebbe essere il seguente:
$categories = get_terms( 'products', 'orderby=count&hide_empty=0' );
quindi per visualizzare le tassonomie usa questo codice:
<?php foreach($categories as $category):
print $category->slug;print $category->name;
?>

Solo un suggerimento, è meglio usare variabili come $terms
e $term
quando lavori con funzioni relative ai termini come get_terms
. È meno confuso che usare una variabile come $categories
:-)

Il modo Wordpress:
$categories = (array) get_terms('partner-cat', array('hide_empty' => false));
foreach (array_keys($categories) as $k)
{
_make_cat_compat($categories[$k]);
}
Questo utilizza l'implementazione diretta che Wordpress usa nella funzione get_categories() situata in wp_includes\category.php

<?php
$args = array(
'type' =>'', //opzionale
'number' => '',
'hide_empty' => 0,
'taxonomy' => 'product_cat' //nome della tua tassonomia personalizzata
);
$categorie = get_categories($args);
//echo "<pre>"; print_r($categorie);
foreach($categorie as $cat){
$catid = $cat->term_id;
$thumbnail_id = get_woocommerce_term_meta($catid, 'thumbnail_id', true );
$immagine = wp_get_attachment_url( $thumbnail_id );
$nome_cat = $cat->name;
$pagina_cat = $cat->slug;
?>
