Obținerea categoriilor în ordine ierarhică ca wp_list_categories - cu nume, slug și link pentru editare categorie

7 feb. 2012, 23:35:11
Vizualizări: 39.6K
Voturi: 5

Am nevoie să găsesc o modalitate de a lista toate categoriile - goale sau nu - într-o listă ierarhică - precum wp_list_categories - arătând și slug-ul, numele categoriei și un link pentru editare în panoul de administrare.

Iată ce am până acum:

$args = array(
        'orderby'   => 'name',
        'order'     => 'ASC',
        'hide_empty'    => '0',
  );

$categories = get_categories($args);

foreach( $categories as $category ) { 

    $cat_ID = $category->term_id;
    $cat_name = $category->name;
    #$cat_desc = $category->description; if ( !$cat_desc { $cat_desc = 'Nimic!' } );
    $cat_count = $category->count;

    echo '<p><strong>'.$cat_name.'</strong>';
    echo ' / <a href="' . get_category_link( $cat_ID ) . '" title="' . sprintf( __( "Vezi toate articolele din %s" ), $cat_name ) . '" ' . '>Vezi ( '. $cat_count . ' articole )</a>  ';
    #echo ' / Descriere: '. $cat_desc . '';
    echo ' / <a href="'. get_admin_url().'edit-tags.php?action=edit&taxonomy=category&tag_ID='.$cat_ID.'&post_type=post" title="Editează Categoria">Editează</a>';
    echo '</p>';  

}

Totul e bine, dar nu este ordonat frumos - doar o listă alfabetică.

0
Toate răspunsurile la întrebare 4
10
14

afișează ca listă neordonată:

<?php

    hierarchical_category_tree( 0 ); // apelul funcției; 0 pentru toate categoriile; sau ID-ul categoriei  

function hierarchical_category_tree( $cat ) {
    // wpse-41548 // alchymyth // o listă ierarhică a tuturor categoriilor //

  $next = get_categories('hide_empty=false&orderby=name&order=ASC&parent=' . $cat);

  if( $next ) :    
    foreach( $next as $cat ) :
    echo '<ul><li><strong>' . $cat->name . '</strong>';
    echo ' / <a href="' . get_category_link( $cat->term_id ) . '" title="' . sprintf( __( "Vezi toate articolele din %s" ), $cat->name ) . '" ' . '>Vezi ( '. $cat->count . ' articole )</a>  '; 
    echo ' / <a href="'. get_admin_url().'edit-tags.php?action=edit&taxonomy=category&tag_ID='.$cat->term_id.'&post_type=post" title="Editează Categoria">Editează</a>'; 
    hierarchical_category_tree( $cat->term_id );
    endforeach;    
  endif;

  echo '</li></ul>'; echo "\n";
}  
?>
8 feb. 2012 00:23:46
Comentarii

genial! - hide_empty pare să necesite o valoare numerică pentru a funcționa, restul este perfect - mulțumesc!

Q Studio Q Studio
8 feb. 2012 23:31:27

poate nu este legat de întrebarea mea inițială, dar cum aș putea determina "nivelul" ierarhiei de categorii pe care se află fiecare categorie - de exemplu, într-o ierarhie pe 3 niveluri, aș avea nevoie să obțin 1, 2 sau 3?

Q Studio Q Studio
9 feb. 2012 00:03:24

http://pastebin.com/GbZFnytw - adăugată afișarea adâncimii ca clasă css a tag-ului ul

Michael Michael
9 feb. 2012 00:24:28

uimitor - există vreo modalitate de a imbrica ul / li - astfel încât toate să se înfășoare - aș dori să încerc să le aduc într-un meniu de tip acordeon, cu deschidere/închidere?

Q Studio Q Studio
10 feb. 2012 00:50:32

prin imbricare m-am referit la <ul><li><ul><li></li></ul></li></ul> - presupun că ai înțeles asta...

Q Studio Q Studio
10 feb. 2012 11:00:59

cod nou http://pastebin.com/TTvYPKPH - corectat cu cod adăugat pentru ieșire html structurată - ignoră vechiul pastebin http://pastebin.com/GbZFnytw

Michael Michael
10 feb. 2012 12:52:11

mulțumesc din nou, aș putea să-ți trimit în privat un link către o pagină? Am o altă întrebare, dar nu vreau să fac URL-ul public.

Q Studio Q Studio
10 feb. 2012 22:37:39

nici o problemă - folosește doar adresa de email asociată cu numele meu de utilizator.

Michael Michael
10 feb. 2012 23:39:38

unde pot găsi această adresă de email?

Q Studio Q Studio
11 feb. 2012 13:41:03

@Michael Foarte frumos! Mulțumesc.

Ruvee Ruvee
5 apr. 2021 05:48:49
Arată celelalte 5 comentarii
3

O versiune ușor actualizată a răspunsului lui Michael pentru a utiliza funcția mai generică get_terms (astfel încât să poți obține taxonomii personalizate, în acest caz am dorit taxonomia categoriei de produse WooCommerce product_cat).

echo hierarchical_term_tree();

function hierarchical_term_tree($category = 0)
{
    $r = '';

    $args = array(
        'parent' => $category,
    );

    $next = get_terms('product_cat', $args);

    if ($next) {
        $r .= '<ul>';

        foreach ($next as $cat) {
            $r .= '<li><a href="' . get_term_link($cat->slug, $cat->taxonomy) . '" title="' . sprintf(__("Vezi toate produsele din %s"), $cat->name) . '" ' . '>' . $cat->name . ' (' . $cat->count . ')' . '</a>';
            $r .= $cat->term_id !== 0 ? hierarchical_term_tree($cat->term_id) : null;
        }
        $r .= '</li>';

        $r .= '</ul>';
    }

    return $r;
}

Simplificat puțin prin eliminarea link-ului de editare etc. Poți adăuga aceste elemente după cum este necesar.

9 oct. 2015 13:17:16
Comentarii

Eroare: Eroare fatală PHP care poate fi prinsă: Obiectul din clasa WP_Error nu a putut fi convertit în șir. Pe această linie: foreach ($next as $cat).

Mehdi Mehdi
14 dec. 2018 04:08:17

Arată bine. Cum aș putea modifica codul pentru a afișa termenul de început în partea de sus a listei? În prezent, afișează toți termenii copii, corect? Folosesc un ID de termen diferit de 0, adică un ID valid, nu toți.

Robert Andrews Robert Andrews
2 feb. 2019 12:25:18

@deadlyhifi Super! A funcționat pentru mine! Mulțumesc.

Ruvee Ruvee
5 apr. 2021 05:46:42
0

Puteți utiliza următorul cod:

$args = array(

    'hide_empty'         => 0,          // Afișează și categoriile goale
    'echo'               => 1,          // Afișează rezultatul direct
    'taxonomy'           => 'category',  // Taxonomia pentru categorii
    'hierarchical'      => 1,           // Afișează ierarhic
    'show_count'         => 1,           // Arată numărul de articole

);

// Adaugă o clasă suplimentară elementelor de listă
function add_class_wp_list_categories($wp_list_categories) {
        $pattern = '/<li class="/is';
        $replacement = '<li class="first ';
        return preg_replace($pattern, $replacement, $wp_list_categories);
}
// Aplică filtrul pentru lista de categorii
add_filter('wp_list_categories','add_class_wp_list_categories');

// Afișează lista de categorii
echo wp_list_categories( $args );
15 iun. 2019 11:21:40
2
-1

Cred că trebuie să incluzi 'hierarchical' => 1, în lista ta de argumente. De asemenea, ai o virgulă în plus la sfârșitul listei de argumente. După ultimul argument nu este nevoie de virgulă :)

Iată un exemplu complet:

$args = array(
        'orderby'   => 'name', 
        'order'     => 'ASC', 
        'hierarchical' => 1,
        'hide_empty'    => '0'
  );
8 feb. 2012 00:07:06
Comentarii

Citește mai multe la http://codex.wordpress.org/Function_Reference/get_categories :)

Ole Henrik Skogstrøm Ole Henrik Skogstrøm
8 feb. 2012 00:07:57

Mulțumesc - dar acest lucru nu le ordonează ierarhic - codex-ul precizează: -- Când este adevărat, rezultatele vor include subcategorii care sunt goale, atâta timp cât acele subcategorii au subcategorii care nu sunt goale. Valoarea implicită este true. Valori valide:

Q Studio Q Studio
8 feb. 2012 23:26:28