Доступ к содержимому записи с помощью WP_Query

29 янв. 2015 г., 20:59:24
Просмотры: 30.8K
Голосов: 4

У меня есть следующий код из шаблона для получения информации о записи:

<?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; ?>

Я хочу отобразить заголовок записи и т.д., но когда я пытаюсь сделать это как показано выше, ничего не отображается. Как мне получить доступ к информации записи?

0
Все ответы на вопрос 2
2

Прежде всего, не используйте и не злоупотребляйте глобальной переменной $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.

29 янв. 2015 г. 21:14:01
Комментарии

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

user1048676 user1048676
29 янв. 2015 г. 21:15:40

Смотрите мое обновление. Надеюсь, это поможет

Pieter Goosen Pieter Goosen
29 янв. 2015 г. 21:22:05
2

Небольшая ошибка в вашем коде. После начала цикла (который вы начинаете после установки $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 и шаблонным тегам.

29 янв. 2015 г. 21:11:23
Комментарии

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

user1048676 user1048676
29 янв. 2015 г. 21:12:42

Всё это делается с помощью шаблонных тегов, см. ссылку выше. <?php the_author(); ?> выведет имя автора, <?php echo get_post_status(); ?> вернет статус записи и т.д.

Jason Hoffmann Jason Hoffmann
29 янв. 2015 г. 21:16:40