Vår erfarenhet är att om du lägger till många kategorier i dina WordPress-inlägg kan det börja se lite rörigt ut. Flera kategorier, särskilt överordnade och underordnade kategorier, kan göra dina layouter röriga och göra det svårare för läsarna att hitta det de letar efter.
Skulle det inte vara smartare att bara visa barnkategorin för varje inlägg?
Den här guiden visar hur du justerar din WordPress-temafil så att den bara visar underordnade kategorier i inläggsslingan, vilket ger din blogg en mer strömlinjeformad och användarvänlig känsla.
Varför bara visa Child Category i din WordPress Post Loop?
När du skapar en WordPress blogg kan du organisera ditt content med hjälp av kategorier och tags.
För att hjälpa läsarna att hitta intressant content snabbare kan du även skapa child kategorier (eller underkategorier).
Om du till exempel har en blogg om resor kan du skapa en kategori ”Destinations” och sedan ha child-kategorier som ”Europe”, ”America” och ”Australia”.
Som standard visar de flesta WordPress-teman alla huvud- och underordnade kategorier för ett post.
Men om du använder många kategorier kan dina bloggsidor börja se röriga och komplicerade ut. Det kan också göra det svårare för läsarna att hitta den kategori de är intresserade av.
Av den anledningen kanske du vill dölja ett posts generiska parent-kategorier och endast visa child-kategorierna. Med detta sagt, låt oss se hur du kan visa endast child kategorier i WordPress post loop.
Innan du editerar en WordPress Theme-fil: Viktiga punkter att komma ihåg
Den här guiden klär dig som är bekväm med att koda och editera WordPress theme-filer. Här är några saker du bör göra innan du följer tutorialen:
- Först måste du ansluta din website med FTP eller öppna ditt webbhotells filhanterare för att kunna komma åt filerna.
- Om du är nybörjare kan du se vår guide för nybörjare om hur du klistrar in snippor från webben i WordPress för att förbereda dig i förväg.
- Vi rekommenderar att du skapar en backup eller använder en staging site för att följa den här metoden. På så sätt påverkas inte din live site om något går fel.
Slutligen är den här guiden endast tillämplig på klassiska WordPress themes. Block themes har en annan struktur för temafiler.
Visar endast Child Category i WordPress Post Loop
I den här handledningen visar vi dig hur du redigerar din temafil med hjälp av Bluehosts fil hanterare. Men oavsett vilken hostingleverantör du har bör stegen vara liknande.
Logga först in på din Bluehost-instrumentpanel och navigera till fliken ”Webbplatser”. Klicka sedan på ”Inställningar” på den webbplats du vill redigera.
Därefter rullar du ner till avsnittet Snabblänkar.
Klicka sedan på knappen ”File Manager”.
Detta öppnar filhanteraren.
Nu måste du hitta koden i din temafil som är ansvarig för att visa kategorier. Du kan börja göra detta genom att gå till din webbplats public_html-mapp ” wp-content ” themes ” ditt aktuella temas mapp.
I det här skedet kan du behöva öppna varje fil och mapp en efter en för att hitta rätt fil att redigera. En sak du kan göra är att försöka hitta kategorirelaterad kod, som has_category
eller get_the_category_list
. Om du hittar dem bör du vara i rätt fil.
Om du inte hittar rätt mallfil kan du läsa vår fuskguide om mallhierarkin i WordPress och vår guide om hur du hittar rätt temafil att redigera.
Om du använder temat Twenty Twenty-One är filen du ska leta efter filen template-tags
i mappen ”inc”. När du har hittat den kan du högerklicka på filen och välja ”Edit”.
I filen är detta det snippet som ansvarar för att visa kategorier och taggar:
if ( has_category() || has_tag() ) {
echo '<div class="post-taxonomies">';
$categories_list = get_the_category_list( wp_get_list_item_separator() );
if ( $categories_list ) {
printf(
/* translators: %s: List of categories. */
'<span class="cat-links">' . esc_html__( 'Categorized as %s', 'twentytwentyone' ) . ' </span>',
$categories_list // phpcs:ignore WordPress.Security.EscapeOutput
);
}
$tags_list = get_the_tag_list( '', wp_get_list_item_separator() );
if ( $tags_list && ! is_wp_error( $tags_list ) ) {
printf(
/* translators: %s: List of tags. */
'<span class="tags-links">' . esc_html__( 'Tagged %s', 'twentytwentyone' ) . '</span>',
$tags_list // phpcs:ignore WordPress.Security.EscapeOutput
);
}
echo '</div>';
}
} else {
Nu när du har hittat rätt kod kan du ersätta hela snippet med det här:
if ( has_category() || has_tag() ) {
echo '<div class="post-taxonomies">';
// Get the list of categories
$categories = get_the_category();
$child_cat_IDs = array(); // Array to store child category IDs
$parent_cat_IDs = array(); // Array to store parent category IDs
foreach ( $categories as $category ) {
if ( $category->parent > 0 ) {
$child_cat_IDs[] = $category->term_id; // Store the child category ID
} else {
$parent_cat_IDs[] = $category->term_id; // Store the parent category ID
}
}
// Output child categories if there are any
if ( !empty($child_cat_IDs) ) {
$output = '<span class="cat-links">' . esc_html__( 'Categorized as ', 'twentytwentyone' ) . ' ';
foreach ( $child_cat_IDs as $cat_id ) {
$cat_link = get_category_link($cat_id);
$cat_name = get_cat_name($cat_id);
$output .= '<a href="' . esc_url($cat_link) . '">' . esc_html($cat_name) . '</a> ';
}
$output .= '</span>'; // Close the span tag after the loop
echo $output; // Output the child category links
// Output parent categories if there are no child categories
} elseif ( !empty($parent_cat_IDs) ) {
$output = '<span class="cat-links">' . esc_html__( 'Categorized as ', 'twentytwentyone' ) . ' ';
foreach ( $parent_cat_IDs as $cat_id ) {
$cat_link = get_category_link($cat_id);
$cat_name = get_cat_name($cat_id);
$output .= '<a href="' . esc_url($cat_link) . '">' . esc_html($cat_name) . '</a> ';
}
$output .= '</span>'; // Close the span tag after the loop
echo $output; // Output the parent category links
}
// Handle tags
$tags_list = get_the_tag_list('', wp_get_list_item_separator());
if ( $tags_list && ! is_wp_error( $tags_list ) ) {
printf(
/* translators: %s: List of tags. */
'<span class="tags-links">' . esc_html__( 'Tagged %s', 'twentytwentyone' ) . '</span>',
$tags_list // phpcs:ignore WordPress.Security.EscapeOutput
);
}
echo '</div>'; // Close post-taxonomies div
}
} else {
Den här kodsnutten identifierar först alla kategorier som tilldelats inlägget. Sedan kontrolleras om varje kategori har en överordnad kategori.
Om det gör det betyder det att det är en underordnad kategori och den läggs till i visningslistan. Föräldrakategorier hoppas över, vilket resulterar i en renare, mer specifik visning av ditt inläggs kategorisering.
Så här ska det se ut när du byter ut koden:
När du är klar sparar du bara dina ändringar.
Nu måste du besöka en post som har en eller flera child kategorier. Du kommer att se att den överordnade kategorin är dold och WordPress visar nu endast kategorierna för barnen.
Vi hoppas att den här artikeln hjälpte dig att lära dig hur du bara visar barnkategorin i dina WordPress-inlägg. Du kanske också vill läsa vår artikel om hur du utformar enskilda kategorier på olika sätt i WordPress och vår nybörjarguide om hur du söker efter kategori i WordPress.
If you liked this article, then please subscribe to our YouTube Channel for WordPress video tutorials. You can also find us on Twitter and Facebook.
Mike
Managed it!
foreach((get_the_category()) as $childcat) {
$parentcat = $childcat->category_parent;
if (cat_is_ancestor_of(10, $childcat)) {
echo get_cat_name($parentcat);
}
}
MIke
I have three main categories and this code is successfully working in my single page loop to echo the actual selected category name.
I now want to echo the parent of the category. The complication is that I have two layers below the main category (3 levels) and I want to echo the one level parent not the top level parent. It seems easy to echo the top parent, but I haven’t seem any code to return the child level category of a grandchild category?
amnachohan
Will it work outside the loop ?
Marian Rick
This is a great piece of code. Thanks a lot so far!
For one of my projects I have to go further, and display only the lowest subcategory. So there may be three levels, (Forms -> Squares -> Big Squares). With this code all subs (Squares -> Big Squares) are displayed. How can I tell this code to repeat the process till only the last child is found and displayed?
If you’ve got any solutions for that you are my heroes once again! Keep up your great work and blog!
GoranJakovljevic
is it possible to do this for 2 categories instead of single one?
gashface
How Would I include &orderby=ID ?
Andus Beckus
This is great thanks!
But how do you display children of all categories and not just cat 10?
Be great if someone could help with this.
Editorial Staff
If you are trying to display a list of all child categories, then use wp_list_categories() function. It has parameters that allow you to list only child categories or only parent categories. But that doesn’t work for the case that we are talking about in this article.
Administratör
Mattia
great, but if I want to show not ”category 10” but ”current category”?
Keith Davis
Great snippets of info from you guys.
I really have to start to get into this PHP.
Great site boys and I notice that you are up to Pagerank 6!
How about a couple of posts on upping your pagerank.