Restituisci lo slug/titolo della categoria dall'ID categoria

6 lug 2013, 22:16:52
Visualizzazioni: 17K
Voti: 2

Ho impostato un campo personalizzato che restituisce l'ID di una categoria selezionata. Vorrei usare questo ID categoria per mostrare in un caso: lo slug della categoria, e in un altro caso: il titolo della categoria.

Il campo viene richiamato semplicemente così: <?php the_field('category_test'); ?> e restituisce l'ID, in questo caso 4.

È possibile usare questo campo per restituire lo slug della categoria e anche per restituire il titolo della categoria? Non sono sicuro di come o se questo possa essere fatto. Qualsiasi suggerimento sarebbe molto apprezzato!

0
Tutte le risposte alla domanda 1
6

get_category restituirà tutte le informazioni necessarie per entrambi i casi.

$catinfo = get_category(get_field('category_test'));

Dal Codex, questo ti darà (dati di esempio ovviamente):

stdClass Object
(
    [term_id] => 85
    [name] => Nome della Categoria
    [slug] => nome-categoria
    [term_group] => 0
    [term_taxonomy_id] => 85
    [taxonomy] => category
    [description] => 
    [parent] => 70
    [count] => 0
    [cat_ID] => 85
    [category_count] => 0
    [category_description] => 
    [cat_name] => Nome della Categoria
    [category_nicename] => nome-categoria
    [category_parent] => 70
)

Sono abbastanza sicuro che get_field sia corretto.

get_category funziona correttamente per ogni ID di categoria che ho provato, e restituisce NULL per ID di categoria non validi, ma come discusso sotto, get_field può restituire un array. Quando ciò accade, get_category sembra restituire la prima categoria nel database per ID, che di default è la categoria uncategorized. Questo può essere dimostrato con il seguente codice.

var_dump(get_category(array(8,9,10)));

Pertanto, per compensare, avrai bisogno di:

$cat_field = get_field('category_test');
if (is_array($cat_field)) {
  $cat_field = $cat_field[0];
}
$catinfo = get_category($cat_field);

Per ottenere qualsiasi campo specifico, usa semplicemente la sintassi standard degli oggetti. Ad esempio:

echo $catinfo->slug;

Oppure

$cname = $catinfo->name;
6 lug 2013 22:27:45
Commenti

ah questo quasi funziona, anche se per qualche motivo restituisce un array per la categoria Uncategorized, nonostante l'ID passato appartenga a un'altra categoria?

user1374796 user1374796
7 lug 2013 04:32:16

ACF può restituire un array di valori specialmente quando usi campi tassonomia. Probabilmente hai bisogno di usare qualcosa come $category = get_field('category_test'); e poi $catinfo = get_category( $category[0] );

RRikesh RRikesh
7 lug 2013 09:17:51

@RRikesh Questo sembra non restituire nulla? Il metodo sopra restituisce un array, ma non per la categoria corretta, mostrando solo Uncategorized per qualche motivo.

user1374796 user1374796
7 lug 2013 12:27:51

@RRikesh Ho anche provato function get_cat_slug($cat_id) { $cat_id = (int)$cat_id; $category = &get_category($cat_id); return $category->slug; } in functions.php e <?php echo get_cat_slug(get_field('category_test')); ?> nella pagina di test e nonostante il campo category_test restituisca l'ID 4, lo slug che viene restituito è ancora quello della categoria uncategorized :(

user1374796 user1374796
7 lug 2013 12:30:24

@s_ha_dum
ah questo quasi funziona, anche se per qualche motivo sta restituendo un array per la categoria Uncategorized, nonostante l'ID passato sia di un'altra categoria?

user1374796 user1374796
7 lug 2013 12:31:42

@user1374796 : vedi la modifica

s_ha_dum s_ha_dum
7 lug 2013 18:07:30
Mostra i restanti 1 commenti