Как отобразить содержимое страницы в шаблоне страницы?
На моем сайте WordPress я создал пользовательский шаблон страницы, который содержит собственный запрос [используя WP_Query()
]. С помощью этого запроса я могу отлично получать записи определенной категории. Но я хочу показать содержимое страницы вместе с запрошенными записями.
Структура должна быть такой:
---------------------------
Заголовок страницы
содержимое страницы
Заголовок запрошенной записи
содержимое запрошенной записи
---------------------------
- Что я могу сделать?

Я использую два цикла. Первый цикл предназначен для отображения содержимого страницы, а второй — для вывода содержимого запрошенных записей. Я добавил комментарии в код, где это необходимо. Я сделал акцент на циклах, так как Deckster0 сказал в службе поддержки WordPress, что the_content()
работает только внутри цикла WordPress. Я размещаю этот код в своем собственном шаблоне:
<?php
/*
* Шаблон: Мой шаблон
*/
get_header(); ?>
<div id="container">
<div id="content" class="pageContent">
<h1 class="entry-title"><?php the_title(); ?></h1> <!-- Заголовок страницы -->
<?php
// ДЛЯ ОТОБРАЖЕНИЯ СОДЕРЖИМОГО СТРАНИЦЫ
while ( have_posts() ) : the_post(); ?> <!-- Поскольку the_content() работает только внутри цикла WP -->
<div class="entry-content-page">
<?php the_content(); ?> <!-- Содержимое страницы -->
</div><!-- .entry-content-page -->
<?php
endwhile; // сброс цикла страницы
wp_reset_query(); // сброс запроса страницы
?>
<?php
// ДЛЯ ОТОБРАЖЕНИЯ СОДЕРЖИМОГО ЗАПИСЕЙ
?>
<?php
$my_query = new WP_Query( 'cat=1' ); // В качестве примера использована категория с ID 1
?>
<?php if ( $my_query->have_posts() ) : ?>
<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
<h1 class="entry-title"><?php the_title(); ?></h1> <!-- Заголовок запрошенной записи -->
<div class="entry-content">
<?php the_excerpt(); ?> <!-- Краткое содержание запрошенной записи -->
</div><!-- .entry-content -->
<?php endwhile; // сброс цикла записей ?>
</div><!-- #post-<?php the_ID(); ?> -->
<?php
wp_reset_postdata(); // сброс запроса записей
endif;
?>
</div><!-- #content -->
</div><!-- #container -->

Второй запрос не должен находиться внутри if( have_posts() )
, потому что это условие всегда будет истинным. Вам следует использовать if( $my_query->have_posts() )
после строки $my_query = new WP_Query( 'cat=1' );
и строк с аргументами, если вы хотите проверить наличие результатов в этом запросе.

Использование двух циклов — распространённый способ, но немного избыточный.
Каждая запись или страница даёт вам супер-переменную $post
. Задумывались ли вы, почему ваш get_post_meta()
работает с простым $post->ID
;) ?
Таким образом, перед началом работы с WP_Query()
, которая получает ваши записи для списка, вы можете получить доступ к данным текущей страницы/записи через $post->ID
, $post->post_content
, $post->guid
и так далее.
Внутри цикла эта переменная заполняется данными текущей записи. Чтобы сохранить её для дальнейшего использования, вы можете либо создать новую переменную:
$temp_post = $post
// new WP_Query() + цикл здесь
либо вызвать
wp_reset_query()
после формирования списка. Последнюю функцию следует вызывать в любом случае, чтобы убедиться, что данные в вашей боковой панели соответствуют текущей странице/записи.
