Plikiem obsługującym widok kategorii jest category.php. Robimy tam pętlę pokazującą kategorię, jakieś jej ostatnie posty. Możemy też dodać, jeżeli kategoria ma rodzica, posty jej kategorii głównej, co też uczynimy.
Pierwsza rzecz – header, footer i tytuł kategorii za pomocą signle_cat_title:
<?php get_header(); ?>
<div>
<h1><?php single_cat_title(); ?></h1>
</div>
<?php get_footer(); ?>
Następnie pobieramy kategorię za pomocą get_queried_object i robimy pętlę dla postów tej kategorii:
<?php get_header(); ?>
<div>
<h1><?php single_cat_title(); ?></h1>
</div>
<div class="container category">
<?php
$current_category = get_queried_object();
// Define query arguments
$args = array(
'post_type' => 'post',
'posts_per_page' => 12,
'orderby' => 'date',
'order' => 'DESC',
'category_name' => $current_category->slug
);
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
?>
<div class="post">
<a href="<?php the_permalink(); ?>">
<?php if (has_post_thumbnail()) : ?>
<?php the_post_thumbnail('medium'); ?>
<?php endif; ?>
<h5 class="post-title"><?php the_title(); ?></h5>
</a>
</div>
<?php
}
wp_reset_postdata();
} else {
echo 'No posts found.';
}
?>
</div>
<?php get_footer(); ?>
Teraz sprawdzamy, czy kategoria ma rodzica:
<?php
$current_category = get_queried_object();
if ($current_category->parent) {
$parent_category = get_category($current_category->parent);
?>
<div class="container parent-name">
<h1><?php echo esc_html($parent_category->name); ?></h1>
</div>
<?php get_footer(); ?>
Jeszcze raz dla pewności stworzyliśmy current_category, choć w zasadzie już to mamy. Jeżeli ma coś pod parent (jakieś ID) to wrzucamy to w get_category i mamy kategorię rodzica.
Teraz ładnie wyświetlamy nazwę kategorii rodzica.
Pozostaje nam tylko zrobić WP query dla kategorii rodzica:
<?php
$parent_category_args = array(
'post_type' => 'post',
'posts_per_page' => 12,
'orderby' => 'date',
'order' => 'DESC',
'category_name' => $parent_category->slug
);
$parent_category_query = new WP_Query($parent_category_args);
if ($parent_category_query->have_posts()) {
?>
<div class="container category parent-category">
<?php
while ($parent_category_query->have_posts()) {
$parent_category_query->the_post();
?>
<div class="post">
(...)
<?php get_footer(); ?>
Już. Jeżeli kategoria jest dzieckiem, to po zaprezentowaniu swojej treści, swoich postów, zaprezentuje też posty należące do jej rodzica.