Încerc să listez termenii unei taxonomii personalizate folosind get_categories

14 aug. 2013, 13:13:23
Vizualizări: 19K
Voturi: 3

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.

0
Toate răspunsurile la întrebare 5
2
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?

14 aug. 2013 13:53:19
Comentarii

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 Poisontonomes
14 aug. 2013 14:01:03

ok, foarte bine... :), soluție simplă, deci probabil ar trebui să o marchezi ca răspuns, cred :P

Kumar Kumar
14 aug. 2013 14:02:02
8

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>';
14 aug. 2013 13:37:15
Comentarii

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 Poisontonomes
14 aug. 2013 13:39:06

Răspuns actualizat. Funcționează pentru mine.

RRikesh RRikesh
14 aug. 2013 13:43:57

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 Poisontonomes
14 aug. 2013 13:52:57

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 RRikesh
14 aug. 2013 13:55:45

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 Poisontonomes
14 aug. 2013 13:58:11

poți arăta codul folosit pentru taxonomie? Adaugă-l în întrebarea ta

RRikesh RRikesh
14 aug. 2013 13:59:26

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 Poisontonomes
14 aug. 2013 14:02:25

Nu îți agăți funcțiile? Mă bucur că a funcționat :)

RRikesh RRikesh
14 aug. 2013 14:03:24
Arată celelalte 3 comentarii
2

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

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 Pieter Goosen
31 mar. 2015 13:25:53

@PieterGoosen Știu :), de aceea am schimbat variabilele mele de la $terms la $categories :)

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

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

30 sept. 2015 18:20:50
1
            <?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;
                ?>
24 aug. 2016 15:05:21
Comentarii

Deși partajarea codului sursă pentru a răspunde la întrebare este utilă, este de asemenea util să oferiți o explicație. Puteți, vă rog, să răspundeți cum ajută acest cod?

Ethan Rævan Ethan Rævan
24 aug. 2016 15:14:32