Вывод записей категории в шаблоне статической страницы

Рейтинг: 0Ответов: 2Опубликовано: 06.07.2023

Стоит задача создать заглавную страницу для категорий материалов. То есть не просто вывести на сайт/category/раздел/подраздел цикл имеющихся записей (archive.php), а чтобы на отдельной статической странице сайт/раздел/подраздел (page.php) со своей структурой и наполнением был также встроен цикл записей нужной категории. К примеру, на полноценной странице категории со своим заголовком и текстом "этот раздел сайта о том-то и о том, потому что то и се... и вообще еще вот тут ссылочки, фоточки и картинки... а подробней смотри здесь:" И ниже выводятся записи, относящиеся к данной категории.
Мои действия (на конкретном примере):

  1. Создал шаблон страницы категории page-glagol.php:

<?php get_header(); ?>

<section id="casing">
<div class="wrapper">

<!-- <middle> -->
<div id="content" class="wide-page">

<?php the_content(); ?>
    
<div class="cat-wrap">
        <?php
            $args = array(
                'post_type' => 'post',
                'posts_per_page' => 10,
                'category_name' => get_the_content(),
            );
        $query = new WP_Query( $args );
            while ( $query->have_posts() ) : $query->the_post(); ?>

<div class="flex-cat">
<div class="entry">
<!-- Анонс (вывод контента до more) -->
<?php the_content(); ?>

<div class="date clear"><?php the_time('d.m.Y'); ?></div>
<div class="tag">
<div>Раздел: <?php the_category(', '); ?></div>
<div>Тэги: <?php the_tags('',', ',''); ?></div>
</div>

</div>

<div class="pic-thumb"><?php the_post_thumbnail(); ?></div>
</div>

<?php endwhile; wp_reset_postdata(); ?>
</div>


</div>
<!-- </middle> -->

<div class="clr"></div>

</div>
</section>

<?php get_footer(); ?>

  1. Добавил в functions.php строку add_post_type_support( 'page', 'content' );

На странице https://riggo.ru/glagol/ контент отображается, а цикл под ним не сработал. Со страницы https://riggo.ru/category/glagol/ материалы выводятся (дизайн материалов еще не правил, поэтому там пока каша)

Ответы

▲ 1Принят

Код Вашего условного шаблона может быть примерно таким. Слаг категории в запрос к базе здесь передаётся через поле "отрывок", которое нужно открыть путём добавления в functions.php строки add_post_type_support( 'page', 'excerpt' ); Наверное, можно придумать и какой-то другой способ передачи, но этот мне показался самым простым.

<?php

/* Template Name: Страница для произвольного вывода записей */

get_header(); ?>

<div class="container">

    <h1><?php the_title(); ?></h1>
    <div class="page-content"><?php the_content(); ?></div>
    
    <div class="news-wrap">
        <?php
            $args = array(
                'post_type' => 'post',
                'posts_per_page' => 10,
                'category_name' => get_the_excerpt(),
            );

        $query = new WP_Query( $args );
            while ( $query->have_posts() ) : $query->the_post(); ?>

        <div class="news-item">
            <h2 class="new-title"><?php the_title(); ?></h2>
            <a href="<?php the_permalink(); ?>"><img src="<?php the_post_thumbnail_url(); ?>" alt=""></a>
        </div>

        <?php endwhile; wp_reset_postdata(); ?>
    </div>

</div>

<?php get_footer(); ?>

Так Вы можете создавать родительские и дочерние страницы, выбирая данный шаблон из списка и прописывая в поле "отрывок" слаг нужного раздела/подраздела записей.

ВАЖНО! Имейте в виду, что при переходе непосредственно на саму запись url в адресной строке вернётся в каноническое состояние: сайт/category/раздел/подраздел/запись (и если у Вас используются "хлебные крошки", с ними произойдёт то же самое). Потому что страницы и записи - это разные сущности, и объединить их в одну древовидную структуру не получится.

▲ 0

После разных попыток решения задачи вывода анонса материалов на вводной странице сработала связка с get_poists вида:

 <?php global $post; $args = array( 'numberposts' => 9 , 'category' => 24, 'orderby' => 'date');
    $myposts = get_posts( $args );
    foreach( $myposts as $post ){ setup_postdata($post); ?>

<div class="flex-cat">
<div class="entry">

<!-- Анонс (вывод контента до more) -->
<?php the_content(); ?>

<div class="date clear"><?php the_time('d.m.Y'); ?></div>

<div class="tag">
<div>Раздел: <?php the_category(', '); ?></div>
<div>Тэги: <?php the_tags('',', ',''); ?></div>
</div>

</div>

<div class="clear"></div>

<div class="pic-thumb"><?php the_post_thumbnail(); ?></div>
<!-- <div class="clear"></div> -->
</div>
<?php } wp_reset_postdata(); ?>

Код вставлен в шаблон страницы со слагом: page-категория.php. В итоге вышло то, что изначально хотел: вводная страница для определенной категории материалов с предварияющими "бла-бла", а ниже цикл вывода самих материалов для этой категории по ID. Спасибо за участие и поддержку всем откликнувшемся. Буду постигать дальше