Я должен нумеровать страницы некоторые пользовательские сообщения... Я не вижу почему, но я добираюсь 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('« Previous Story') ?></div>
<div style="float:right; font-weight:bold"><?php previous_posts_link('Next Story »') ?></div>
</div>
У меня есть 'разбитое на страницы' значение и навигация сообщения, какая-либо идея, что произошло теперь....?
Спасибо :)
Не использовать query_posts
. Это - классический пример того, что происходит, когда Вы делаете :)
В основном, когда WordPress получает URL, он интерпретирует это как запрос - он затем запрашивает базу данных для нахождения результатов (если таковые имеются) и подает соответствующий шаблон (такой как 404.php в случае никаких результатов).
Если это, оказывается, достигает Вашей шаблонной страницы - этому затем говорят отбросить тот запрос и запустить новый (который расточителен), и повредит разбиение на страницы.
В основном разбиение на страницы добавляет paged
запросите переменную к текущему URL - этот новый URL (который должен взять Вас к странице 2, сказать) - формирует основание запроса для получения страницы 2 - но URL в строке поиска не является содержанием, которое Вы после (потому что Вы отбрасываете это и запускаете новый запрос с query_posts
. Конечный результат состоит в том, что запрос, что Вы действительно не хотите, выполняется и не поднимает результатов, таким образом, эти 404 шаблона подаются и шаблон с Вашим query_posts
никогда не достигается.
Взгляните на вышеупомянутое связанное сообщение для альтернатив query_post
, но поскольку это - 'основной запрос', (запрос на основе полученного URL) Вы хотите использовать pre_get_posts
.
Попробуйте это...
<?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;?>
query_posts()
не должен использоваться в целом и особенно при попытке смешать с разбиением на страницы.
И разбиение на страницы и 404 логики происходят перед шаблонным файлом (и query_posts()
в нем), даже начинает загружаться.
Настраивать основной запрос страницы один из наилучших вариантов означает использовать pre_get_posts
рычаг.
s_stories
? WordPress автоматически генерирует 'архив' типов сообщения сwww.example.com?post_type=s_stories
(и у Вас может быть симпатичная эквивалентная постоянная ссылка), – Stephen Harris 20.05.2012, 21:45function 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