query_posts и разбиение на страницы, все еще застрявшее после большого исследования

Я должен нумеровать страницы некоторые пользовательские сообщения... Я не вижу почему, но я добираюсь 404 при движении в следующую страницу. Вот мой код:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

query_posts( array( 'post_type' => 's_stories', 'posts_per_page' => 4 , 'paged'=>$paged) );

if (have_posts()){ 

while (have_posts()) { the_post(); ?>


<div class="post">
<h2 class="title"><a href="<?php echo get_permalink($post->ID); ?>"><?php the_title(); ?></a></h2>
<?php the_excerpt(); ?>

</div> <!-- end post -->

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

<?php } }  ?>

<div class="paging">


    <div style="float:left; font-weight:bold"><?php next_posts_link('&laquo; Previous Story') ?></div>
    <div style="float:right; font-weight:bold"><?php previous_posts_link('Next Story &raquo;') ?></div>

</div>

У меня есть 'разбитое на страницы' значение и навигация сообщения, какая-либо идея, что произошло теперь....?

Спасибо :)

1
20.05.2012, 19:31
3 ответа

Не использовать query_posts. Это - классический пример того, что происходит, когда Вы делаете :)

В основном, когда WordPress получает URL, он интерпретирует это как запрос - он затем запрашивает базу данных для нахождения результатов (если таковые имеются) и подает соответствующий шаблон (такой как 404.php в случае никаких результатов).

Если это, оказывается, достигает Вашей шаблонной страницы - этому затем говорят отбросить тот запрос и запустить новый (который расточителен), и повредит разбиение на страницы.

В основном разбиение на страницы добавляет paged запросите переменную к текущему URL - этот новый URL (который должен взять Вас к странице 2, сказать) - формирует основание запроса для получения страницы 2 - но URL в строке поиска не является содержанием, которое Вы после (потому что Вы отбрасываете это и запускаете новый запрос с query_posts. Конечный результат состоит в том, что запрос, что Вы действительно не хотите, выполняется и не поднимает результатов, таким образом, эти 404 шаблона подаются и шаблон с Вашим query_posts никогда не достигается.

Взгляните на вышеупомянутое связанное сообщение для альтернатив query_post, но поскольку это - 'основной запрос', (запрос на основе полученного URL) Вы хотите использовать pre_get_posts.

2
19.02.2020, 22:44
  • 1
    Спасибо за ответы все. Я просто смотрел на pre_get_posts, это использовалось бы только на этом шаблоне страницы, я продолжаю работать? Это для использования на одном пользовательском типе сообщения, таким образом, я предполагаю, что мог просто отбросить его в functions.php. Так или иначе, никакая удача с запросом все же (с pre_get_posts), я думал что-то как: $query-> query_vars ['post_type'] = 's_stories’;...? –  Dan 20.05.2012, 19:59
  • 2
    , Что-то как этот работало бы - кто точно Вы после? Когда делают Вы хотите отобразиться s_stories? WordPress автоматически генерирует 'архив' типов сообщения с www.example.com?post_type=s_stories (и у Вас может быть симпатичная эквивалентная постоянная ссылка), –  Stephen Harris 20.05.2012, 21:45
  • 3
    Хорошо, таким образом, я тестирую через шаблон. Мне нужны 4 сообщения на страницу от моего пользовательского типа сообщения с разбиением на страницы. Вот то, что я имею до сих пор: –  Dan 22.05.2012, 16:14
  • 4
    function s_stories( $query ) { global $wp_query; if($query->is_main_query()){ if(is_page_template('student-stories.php')){ $query->set('posts_per_page',4); $query->set('post_type','s_stories'); } } } add_action( 'pre_get_posts', 's_stories' ); –  Dan 22.05.2012, 16:14
  • 5
    , Почему бы не использовать архив типа сообщения, который производит тот WordPress? См. мой комментарий выше. –  Stephen Harris 22.05.2012, 16:23

Попробуйте это...

<?php
  global $paged; global $wp_query;
  $temp = $wp_query; $wp_query= null; $wp_query = new WP_Query();
  $wp_query->query('showposts=XX&post_type=POST_TYPE_NAME'.'&paged='.$paged);
  while ($wp_query->have_posts()) : $wp_query->the_post(); 
?>

    // do your content output here...

<?php endwhile; ?>

   // do pagination here...

<?php $wp_query = null; $wp_query = $temp;?>
2
19.02.2020, 22:44
  • 1
    Привет Userabuser, просто требуемый для выражения благодарности за не торопление для записи, мне нужно отсортировать это теперь. Dan –  Dan 23.05.2012, 12:54

query_posts() не должен использоваться в целом и особенно при попытке смешать с разбиением на страницы.

И разбиение на страницы и 404 логики происходят перед шаблонным файлом (и query_posts() в нем), даже начинает загружаться.

Настраивать основной запрос страницы один из наилучших вариантов означает использовать pre_get_posts рычаг.

1
19.02.2020, 22:44

Теги

Похожие вопросы