2016-09-26 3 views
0

Я инициализировал объект WP_Query и использовал этот объект для отображения информации о сообщении. Но, когда я отправляю постоянную ссылку для любого сообщения, он показывает домашнюю страницу, а не эту страницу. Вот мой index.php код:После инициализации объекта WP_Query все постоянные ссылки отображаются на одной странице

<?php 
 
\t $myWpQuery = new WP_Query(array('author_name' => 'me')); 
 
\t if($myWpQuery->have_posts()){ 
 
\t \t while ($myWpQuery->have_posts()) { 
 
\t \t \t $myWpQuery->the_post(); 
 
\t \t \t ?> 
 
\t \t \t \t <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><br /> 
 
\t \t \t <?php 
 
\t \t } 
 
\t } 
 
?>

У меня есть три поста с именем автора "я". Когда я загружаю домашнюю страницу (http://localhost/wordpress/), она показывает название этих трех столбцов в соответствующем теге привязки. Но когда я нажимаю на заголовок, он выводит меня на страницу сообщения (http://localhost/wordpress/hello-world/). Проблема здесь. Эта страница также показывает эти три названия в качестве домашней страницы. Но я ожидал только заголовка сообщения, на которое я нажал.

Но когда я использую простой следующий код, он работает правильно.

<?php 
 
\t if(have_posts()){ 
 
\t \t while (have_posts()) { 
 
\t \t \t the_post(); 
 
\t \t \t ?> 
 
\t \t \t \t <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><br /> 
 
\t \t \t <?php 
 
\t \t } 
 
\t } 
 
?>

Что происходит после инициализации объекта WP_Query. Может ли кто-нибудь объяснить это, пожалуйста.

+0

Ваш цикл WP_Query выглядит нормально, но каков контекст? Это все ваш файл index.php? – DavidCara

+0

Да, это все, что у меня есть в моем файле index.php. И только два файла в моей теме. index.php и style.css. Я учусь, поэтому все просто. Любое решение? –

ответ

0

Я думаю, что вам не хватает данных. Посмотрите на пример ниже (взяты из wordpress.org), то, как ваш запрос должен выглядеть следующим образом:

<ul> 
<?php 
    global $post; 
    $args = array('numberposts' => 5, 'offset'=> 1, 'category' => 1); 
    $myposts = get_posts($args); 
    foreach($myposts as $post) : 
    setup_postdata($post); ?> 
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> 
<?php 
    endforeach; 
    wp_reset_postdata(); 
?> 
</ul> 

https://codex.wordpress.org/Function_Reference/setup_postdata - вот посмотрите на примере 1 https://wordpress.stackexchange.com/questions/99597/what-does-setup-postdata-post-do - информация о функции, что setup_postdata() делает

Не настраивая postdata, ваш цикл может хранить данные из предыдущей итерации. То же самое можно было бы использовать с новым WP_Query вместо get_posts().

0

Поскольку в вашем запросе используется the_post(), вам необходимо выполнить сброс после восстановления глобальной переменной $ post основного цикла запроса. Правильный способ сделать это при использовании WP_Query() является вызов wp_reset_postdata() после пользовательского цикла, как это:

<?php 
$myWpQuery = new WP_Query(array('author_name' => 'me')); 

if($myWpQuery->have_posts()){ 

    while ($myWpQuery->have_posts()) { 

     $myWpQuery->the_post(); 

     ?> 
      <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><br /> 
     <?php 

    } 

    // Restore original Post Data 
    wp_reset_postdata(); 

} else { 

    // No posts found 

} 

Я не уверен, если это вызывает проблему, но это определенно что-то исправить. См. https://codex.wordpress.org/Function_Reference/wp_reset_postdata.