Доступ к содержимому записи с помощью WP_Query
У меня есть следующий код из шаблона для получения информации о записи:
<?php
$args = array(
'post_type' => 'post',
'posts_per_page' => $count,
'paged' => $paged,
);
$wp_query = new WP_Query( $args );
?>
<?php if ( $wp_query->have_posts() ) : ?>
<?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
<?php echo $wp_query->post_title.'<br>';
<?php endwhile; ?>
<?php endif; ?>
Я хочу отобразить заголовок записи и т.д., но когда я пытаюсь сделать это как показано выше, ничего не отображается. Как мне получить доступ к информации записи?
Прежде всего, не используйте и не злоупотребляйте глобальной переменной $wp_query
. Эта глобальная переменная должна быть зарезервирована только для основного запроса. Используйте любую другую переменную, которая не создаст конфликта.
Во-вторых, не используйте сырые WP_Post
свойства. Они являются сырыми и не фильтруются. WP_Query
по умолчанию устанавливает данные записи, что делает возможным использование тегов шаблонов.
В-третьих, всегда сбрасывайте все экземпляры WP_Query
, чтобы избежать конфликтов с другими запросами на той же странице.
В-четвертых, у вас есть синтаксическая ошибка в этой строке <?php echo $wp_query->post_title.'<br>';
. Вы пропустили закрывающий тег php.
Вы можете переписать свой код примерно так:
$args = array(
'post_type' => 'post',
'posts_per_page' => $count,
'paged' => $paged,
);
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
the_title();
the_content();
}
wp_reset_postdata();
}
РЕДАКТИРОВАНИЕ
Если вам нужно напрямую получить доступ к свойствам WP_Post
, вы можете использовать, например:
echo apply_filters( 'the_content', $query->post_content );
для отображения содержимого записи,
echo apply_filters( 'the_title', $query->post_title );
покажет заголовок записи. Статус записи можно получить с помощью:
$query->post_status
Смотрите список всех доступных свойств здесь.
Не забывайте, что существуют теги шаблонов, доступные во время цикла для отображения этой информации без использования свойств WP_Post
.

Я задал тот же вопрос ниже: Что, если я хочу получить доступ к большему количеству данных, таким как post_status и тому подобное? Является ли использование WP_Query таким образом хорошей идеей для этого?

Небольшая ошибка в вашем коде. После начала цикла (который вы начинаете после установки $wp_query->the_post();
), вы можете получать доступ к содержимому записи с помощью шаблонных тегов WordPress. Например, если вы хотите отобразить заголовок и содержимое, это будет выглядеть так:
<?php
$args = array(
'post_type' => 'post',
'posts_per_page' => $count,
'paged' => $paged,
);
$wp_query = new WP_Query( $args );
?>
<?php if ( $wp_query->have_posts() ) : ?>
<?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
<h3><?php the_title(); ?></h3>
<p><?php the_content(); ?></p>
<?php endwhile; ?>
<?php endif; ?>
Рекомендую ознакомиться с документацией по WP_Query
и шаблонным тегам.

Что если я хочу получить доступ к большему количеству данных, таким как post_status и тому подобное?
