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.