Come elencare i termini di una tassonomia personalizzata usando get_categories

14 ago 2013, 13:13:23
Visualizzazioni: 19K
Voti: 3

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.

0
Tutte le risposte alla domanda 5
2
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?

14 ago 2013 13:53:19
Commenti

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!

Poisontonomes Poisontonomes
14 ago 2013 14:01:03

ottimo... :), soluzione semplice, quindi dovresti contrassegnarla come risposta credo :P

Kumar Kumar
14 ago 2013 14:02:02
8

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>';
14 ago 2013 13:37:15
Commenti

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

Poisontonomes Poisontonomes
14 ago 2013 13:39:06

Risposta aggiornata. Funziona per me.

RRikesh RRikesh
14 ago 2013 13:43:57

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

Poisontonomes Poisontonomes
14 ago 2013 13:52:57

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

RRikesh RRikesh
14 ago 2013 13:55:45

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

Poisontonomes Poisontonomes
14 ago 2013 13:58:11

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

RRikesh RRikesh
14 ago 2013 13:59:26

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

Poisontonomes Poisontonomes
14 ago 2013 14:02:25

Non stai agganciando le tue funzioni? Sono contento che abbia funzionato :)

RRikesh RRikesh
14 ago 2013 14:03:24
Mostra i restanti 3 commenti
2

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; 
?>
31 mar 2015 13:21:24
Commenti

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

Pieter Goosen Pieter Goosen
31 mar 2015 13:25:53

@PieterGoosen Lo so :), è per questo che ho cambiato le mie variabili da $terms a $categories :)

Mile Milosheski Mile Milosheski
1 apr 2015 16:08:21
0

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

30 set 2015 18:20:50
1
            <?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;
                ?>
24 ago 2016 15:05:21
Commenti

Sebbene condividere il codice sorgente per rispondere alla domanda sia utile, è anche utile fornire una spiegazione. Potresti per favore rispondere su come questo codice aiuta?

Ethan Rævan Ethan Rævan
24 ago 2016 15:14:32