Cum să afișezi o listă de categorii
Încerc să configurez o listă de categorii cu linkuri clicabile către fiecare categorie. Am consultat:
și nu sunt sigur unde să pun codul sau cum să-l accesez în pagină.
Înțeleg destul de bine PHP-ul - este destul de simplu, doar că sunt relativ nou în WordPress și am nevoie de ajutor pentru implementare.

Voi arăta cum să afișezi o listă de categorii în WordPress și cum să marchezi categoria activă, vezi codul de mai jos:
<?php // Obține obiectul curent interogat $term = get_queried_object(); $term_id = ( isset( $term->term_id ) ) ? (int) $term->term_id : 0; $categories = get_categories( array( 'taxonomy' => 'category', // Taxonomia pentru care se preiau termenii. Vrem 'category'. Reține că acest parametru este implicit 'category', deci poți să-l omiți 'orderby' => 'name', 'parent' => 0, 'hide_empty' => 0, // schimbă în 1 pentru a ascunde categoriile care nu au niciun articol ) ); ?> <ul> <?php foreach ( $categories as $category ) { $cat_ID = (int) $category->term_id; $category_name = $category->name; // Când vizualizezi o anumită categorie, adaugă clasa [active] $cat_class = ( $cat_ID == $term_id ) ? 'active' : 'not-active'; // Nu-mi place să afișez categoria [uncategorized] if ( strtolower( $category_name ) != 'uncategorized' ) { printf( '%3$s', esc_attr( $cat_class ), esc_url( get_category_link( $category->term_id ) ), esc_html( $category->name ) ); } } ?> </ul>
Note despre codul de mai sus:
get_queried_object() preia obiectul curent interogat. De exemplu:
- dacă ești pe un articol singular, va returna obiectul articolului
- dacă ești pe o pagină, va returna obiectul paginii
- dacă ești pe o pagină de arhivă, va returna obiectul tipului de postare
- dacă ești pe o arhivă de categorii, va returna obiectul categoriei
- dacă ești pe o arhivă de autor, va returna obiectul autorului
- etc.
Dar există câteva implicații atunci când folosești get_queried_object()
, nu ar trebui să te aștepți să returneze un obiect de tip postare chiar și atunci când is_post_type_archive() este adevărat. Verifică pentru mai multe informații.
De asemenea, reține că get_queried_object()
este un wrapper pentru $wp_query->get_queried_object()
, deci returnează un tip de date WP object.
get_categories()
get_categories() preia o listă de obiecte de categorii. În prezent acceptă doar un parametru - $args
. Parametrul $args specifică o listă de argumente care ar trebui folosite pentru a prelua categoriile. Vezi get_terms() pentru opțiuni suplimentare.
Totuși, pentru a obține categoriile pentru o anumită postare, iată o funcție simplă pe care am scris-o: Cum să obții lista de categorii pentru o postare

Conform firului WPSE menționat și răspunsului acceptat, codul este (copiat și lipit):
$categories = get_categories('child_of=31');
foreach ($categories as $category) {
// Afișează informațiile subcategoriei folosind valorile $category, cum ar fi $category->cat_name
echo '<h2>'.$category->name.'</h2>';
echo '<ul>';
foreach (get_posts('cat='.$category->term_id) as $post) {
setup_postdata( $post );
echo '<li><a href="'.get_permalink($post->ID).'">'.get_the_title().'</a></li>';
}
echo '</ul>';
}
Pentru noi (dezvoltatorii WordPress) Codex este cheia pentru majoritatea elementelor de bază. Deci, conform WordPress Codex:
get_categories()
interoghează toate categoriile unui site și returnează un array.- În mod similar,
get_posts()
interoghează toate articolele unui site și returnează un array.
Și ambele sunt prescurtări ale WP_Query()
. Puteți găsi toți parametrii posibili din paginile Codex. Deoarece sunteți un entuziast PHP, știți cum funcționează codul: $categories
preia toate categoriile, iar pentru fiecare categorie get_posts()
preia articolele sale.
Deci, este foarte similar cu o interogare mySQL și o buclă foreach în PHP simplu. Puteți introduce acest cod în oricare dintre paginile de șablon ale temei active a site-ului dvs. WordPress. Ierarhia șabloanelor vă poate oferi o perspectivă detaliată.
Conform titlului întrebării dumneavoastră:
How to display a list of categories (Cum se afișează o listă de categorii)
Răspunsul poate fi:
$categories = get_categories();
echo '<ul>';
foreach ($categories as $category) {
echo '<li>'. $category->cat_name .'</li>';
}
echo '</ul>';
Nu sunt sigur unde să pun codul sau cum să-l accesez pe pagină.
Am menționat deja, încercați să introduceți codul în index.php
, front-page.php
, ... oriunde. Conceptul cheie este: este doar o interogare SQL și o buclă foreach
utilă în PHP.

Această metodă vă permite să excludeți orice categorie prin simpla adăugare a ID-ului categoriei în cod.
Iată o metodă mai bună pentru a adăuga o listă de categorii condiționat din fișierul de funcții al temei child, în orice locație de hook WordPress sau specifică temei:
add_filter( 'the_content', 'wpsites_list_cats' );
function wpsites_list_cats($content) {
if( is_singular('post') && is_main_query() ) {
$args = array(
'orderby' => 'name',
'exclude' => '',
'include' => '',
'parent' => 0
);
$categories = get_categories( $args );
echo'<nav id="primary-navigation" class="primary-navigation" role="navigation">';
foreach ( $categories as $category ) {
echo '<li><a href="' . get_category_link( $category->term_id ) . '">' . $category->name . '</a></li>';
}
echo'</nav>';
return $content;
}
}
Iată rezultatul
Și iată rezultatul dacă doriți să folosiți stilizarea existentă din meniurile de navigare ale temei Twenty Fourteen, pe care codul de mai sus o include.
Codul vă permite, de asemenea, să includeți categorii specifice sau să excludeți oricare folosind ID-urile categoriilor.
Puteți de asemenea să creați o zonă widget personalizată și să folosiți widget-ul nativ de categorii din WordPress.
Pur și simplu schimbați hook-ul the_content pentru a modifica locația listei de categorii.
Modificat după această sursă

Sau poți folosi plugin-ul List Categories cu propriul său shortcode configurabil, care funcționează ca o scurtătură către funcția wp_list_categories( array|string $args = '' )
.
Poți configura argumentele acesteia conform documentației menționate.
