У меня возникают проблемы с нумерацией страниц при отображении пользовательских типов сообщений. Я хотел бы отобразить 9 сообщений, а затем отобразить числовую разбивку на страницы. Это работает, некоторые ссылки генерируются с (для меня) правильными URL-адресами: http://mywebsite/tutorial/page/2 или http://mywebsite/tutorial/taxonomy/page/2, но они всегда заканчиваются на странице 404.
Любая идея приветствуется, ниже приведен мой код, так что если вы видите какие-либо проблемы 🙂
Спасибо заранее.
Кирилл
<?php
$args = array(
'post_type' => 'tutorial',
'paged' => ((get_query_var('paged')) ? get_query_var('paged') : 1),
'posts_per_page' => 9
);
query_posts($args);
?>
[MAIN LOOP]
<?php numeric_pagination(); ?>
Вот функция numeric_pagination() (найдена в Интернете, работает на другом сайте…):
function numeric_pagination($pages = '', $range = 2) {
global $paged;
$showitems = ($range * 2) + 1;
if(empty($paged)) $paged = 1;
if($pages == '') {
global $wp_query;
$pages = $wp_query->max_num_pages;
if(!$pages) {
$pages = 1;
}
}
if(1 != $pages) {
echo '<div class="numeric-pagination"><p>';
if($paged > 2 && $paged > $range+1 && $showitems < $pages) echo '<a href="'.get_pagenum_link(1).'">«</a>';
if($paged > 1 && $showitems < $pages) echo '<a href="'.get_pagenum_link($paged - 1).'">‹</a>';
for ($i=1; $i <= $pages; $i++) {
if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems )) {
echo ($paged == $i)? '<span class="current">'.$i.'</span>':'<a href="'.get_pagenum_link($i).'" class="inactive" >'.$i.'</a>';
}
}
if ($paged < $pages && $showitems < $pages) echo '<a href="'.get_pagenum_link($paged + 1).'">›</a>';
if ($paged < $pages-1 && $paged+$range-1 < $pages && $showitems < $pages) echo '<a href="'.get_pagenum_link($pages).'">»</a>';
echo '</p></div>';
}
}
Возможно, есть проблема с моим пользовательским типом сообщений и моими таксономиями, поэтому я также даю код для этого:
/* POST TYPE */
add_action('init','create_tutorials_post_type');
function create_tutorials_post_type() {
// Labels
$labels = array(
'name' => 'Tutorials',
'singular_name' => 'Tutorial',
'add_new' => 'Add new',
'add_new_item' => 'Add new tutorial',
'edit_item' => 'Edit',
'new_item' => 'New tutorial',
'view_item' => 'View tutorial',
'search_items' => 'Search tutorial',
'not_found' => 'No tutorial found',
'not_found_in_trash' => 'No tutorial found in trash',
'parent_item_colon' => '',
'menu_name' => 'Tutorials'
);
// Arguments
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => true,
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => null,
'supports' => array('title','editor','author','thumbnail','excerpt','comments')
);
// Register post type
register_post_type('tutorial',$args);
}
/* TAXONOMY */
add_action('init','create_tutorials_taxonomies');
function create_tutorials_taxonomies() {
// Labels
$labels = array(
'name' => 'Tutorial types',
'singular_name' => 'Tutorial type',
'search_items' => 'Search a type',
'all_items' => 'All types',
'parent_item' => 'Parent type',
'parent_item_colon' => 'Parent type:',
'edit_item' => 'Edit type',
'update_item' => 'Update type',
'add_new_item' => 'Add new type',
'new_item_name' => 'New tutorial type',
'menu_name' => 'Types'
);
// Arguments
$args = array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'query_var' => true,
'rewrite' => array('slug' => 'tutorials', 'hierarchical' => true)
);
// Register taxonomy
register_taxonomy('tutorial_type',array('tutorial'),$args);
}
Измените предопределенное значение posts_per_page на минимальное значение в настройках WordPress или добавьте код ниже в functions.php. WordPress с параметром по умолчанию. Например: 10. И если ваши настройки в query_posts или WP_Query выглядят как «posts_per_page=>2», а количество сообщений в пользовательском типе сообщений меньше 10, после нажатия на /page/2/ вы будете перенаправлены на страницу 404.
Используйте этот код для functions.php для решения проблемы:
Спасибо, но я уже попробовал это, и проблема все еще существует 🙂
к сожалению, это не работает… но это хорошее решение для решения этой проблемы, если вам просто нужно изменить настройку сообщений для всего сайта на страницу.
Эй, у меня была похожая проблема.
Проблема заключалась в том, что WordPress настроен на отображение 10 сообщений на странице по умолчанию, что противоречило моему запросу (ограничивая его до 2 сообщений), чтобы исправить проблему, я изменил параметр WordPress («Настройки / Чтение» на панели администратора) на 1.
Я бы использовал paginate_links() для этого:
Это последний и лучший пример из статьи кодекса, ссылка на которую приведена выше. Как правило, лучше использовать основную функцию всякий раз, когда предоставляется возможность.
Я решил эту проблему, используя фильтр parse_query. Подробнее см. здесь: Исправление пользовательского запроса на разбивку на страницы без изменения настроек количества сообщений на странице для всего сайта.
Я знаю, что это очень старый вопрос, но если кто-то столкнется с этой проблемой, попробуйте следующее:
Установите «posts_per_page = x» в вашем php-коде на то же значение, что и «Настройки чтения» в области администрирования. Поэтому, если ‘posts_per_page = 3’, в настройках чтения ‘Максимум отображаемых страниц блога’ также должно быть установлено значение 3.