Пагинация в WordPress с пользовательским типом записей?

5 янв. 2011 г., 04:45:01
Просмотры: 3.07K
Голосов: 0

Я искал решение по всему интернету, но ничего не работает. Может кто-то помочь с этим и объяснить, в чем проблема? Я потратил 3 часа на отладку, но так и не нашел причину.

Вот мой код:

global $paged;
global $wp_query;
wp_reset_query();

$per_page = get_option('posts_per_page');
$cat_cars = get_term_by('slug', 'cars', 'category');
$page_links_total = ceil($cat_cars->count / $per_page);
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

$args = array(
    'post_type' => 'cars',
    'post_status' => 'publish',
    'cat' => $cat_cars->term_id,
    'orderby' => 'date',
    'order' => 'DESC',
    'posts_per_page' => $per_page,
    'paged' => $paged
);

$page_links = paginate_links(array(
            'base' => add_query_arg('paged', '%#%'),
            'format' => '',
            'prev_text' => __('«'),
            'next_text' => __('»'),
            'end_size' => 2,
            'mid_size' => 1,
            'type' => 'plain',
            'total' => $page_links_total,
            'current' => $paged
        ));

$car_query = new WP_Query($args);

А затем я вызываю have_posts, the_post и т.д.
Эта часть работает, пока я не перехожу на вторую страницу пагинации - там ничего не находится.

12
Комментарии

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

t31os t31os
5 янв. 2011 г. 12:53:22

print_r массива, echo для каждой переменной и wp_die('') - шаг за шагом. Проблема связана с пользовательскими типами записей и пагинацией, но не могу найти источник проблемы и способ её исправить

user1147 user1147
5 янв. 2011 г. 12:56:38

@user1147: Есть ли причина, по которой вы не используете $car_query->max_num_pages для аргумента total в paginate_links()? Это, вероятно, не решит вашу проблему, но сэкономит один ресурсоёмкий запрос к базе данных.

Jan Fabry Jan Fabry
5 янв. 2011 г. 12:57:56

@Jan Fabry : Я знаю про man_num_pages, именно так я создавал пагинацию для wp. Как можно определить, какой запрос ресурсоемкий, а какой нет?

user1147 user1147
5 янв. 2011 г. 13:01:40

@user1147: Возможно, он не ресурсоемкий, но я думаю, он вам не нужен, так как похоже, что вы можете получить нужную переменную из основного запроса постов, который вам все равно нужно выполнить.

Jan Fabry Jan Fabry
5 янв. 2011 г. 13:02:49

да, красивые постоянные ссылки, но разве это должно быть проблемой? пагинация должна работать независимо от типа постоянных ссылок, верно?

user1147 user1147
5 янв. 2011 г. 13:03:42

это на шаблонной странице - моей пользовательской странице. Только запрос на моей странице.

user1147 user1147
5 янв. 2011 г. 13:05:02

@user1147: Возможно, тебе стоит зайти в чат и мы сможем там разобраться с проблемой.

Jan Fabry Jan Fabry
5 янв. 2011 г. 13:05:19

@Jan Fabry, да, ты прав, мне не нужен дополнительный запрос.

user1147 user1147
5 янв. 2011 г. 13:06:30

Это на моем локальном сервере, не могли бы вы дать мне несколько советов, как отладить это, возможно, мой подход к отладке был неправильным

user1147 user1147
5 янв. 2011 г. 13:09:59

Это обсуждалось в чате, проблема просто исчезла.

Jan Fabry Jan Fabry
5 янв. 2011 г. 15:21:53

Похоже, проблема была с файлом .htaccess, когда я обновил постоянные ссылки, он начал работать так, как должен.

user1147 user1147
5 янв. 2011 г. 22:01:24
Показать остальные 7 комментариев
Все ответы на вопрос 2
0

Недавно я столкнулся с подобной проблемой и выяснил, что причина заключается в том, что WordPress при запросе постов в категории сначала ищет записи с post_type равным 'post', прежде чем дойдет до точки, где вы запрашиваете post_type 'any' или какой-либо пользовательский тип записи. Это не вызывает проблем на первой странице, потому что даже если постов нет, он вызывает ваш шаблон. Однако на второй и последующих страницах он не находит записей с post_type 'post', поэтому загружает шаблон 404 до того, как ваш шаблон получит возможность изменить параметр post_type.

Это баг? Хороший вопрос. Я бы сказал, что да, потому что можно ожидать, что если вы регистрируете таксономию 'category' для других post_types, все типы записей должны отображаться в этом архиве, а не только стандартные записи.

Надеюсь, это поможет.

23 мар. 2011 г. 23:18:39
0

У меня есть этот код (очищенный) на сайте, который выводит записи из пользовательского типа записей, а внизу пагинацию, если записей больше 10:

<?php $wp_query = new WP_Query();  $wp_query->query('post_type=mycpt&showposts=10'.'&paged='.$paged); 
while ($wp_query->have_posts()) : $wp_query->the_post();?>
<h3><?php the_title(); ?></h3>
<?php the_content();?>  
<?php endwhile; wp_reset_query(); ?>

<?php if (  $wp_query->max_num_pages > 1 ) { ?>
<div id="nav-below" class="navigation">
<div class="nav-previous"><?php next_posts_link( __( '<span class="meta-nav">&laquo;</span> Старые записи', 'twentyten' ) ); ?></div>
<div class="nav-next"><?php previous_posts_link( __( 'Новые записи <span class="meta-nav">&raquo;</span>', 'twentyten' ) ); ?></div>
</div>
<?php } ?>

Надеюсь, это поможет.

5 янв. 2011 г. 16:52:52