Вопрос или проблема
Я поднимаю вопрос, который не удалось решить после нескольких дней поиска решений в Google. Цель, которую я должен достичь, – это создать пагинацию для пользовательского типа записи с именем office-magazines с работающими ссылками. Мне уже удалось вывести пагинацию, но при нажатии на любую из ссылок в ней, меня перебрасывает на верхнюю страницу.
Вот код, который я встроил в шаблон страницы:
<?php
global $wp_query, $paged;
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array(
'post_type' => 'office-magazines',
'posts_per_page' => 9,
'paged' => $paged,
'has_archieve' => true
);
$catquery = new WP_Query($args);
?>
<p class="pagination">
<?php echo custom_pagination_bar( $loop ); ?>
</p>
Передача 'post_type' => 'office-magazines'
должна отфильтровать все записи, кроме тех, которые принадлежат пользовательскому типу записи 'office-magazines'
.
Используя следующий код в functions.php, я намеревался определить функцию пагинации:
function custom_pagination_bar($custom_loop) {
$big = 999999999;
echo paginate_links( array(
'base' => str_replace( $big, '%#%', get_pagenum_link( $big ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $custom_loop->max_num_pages
) );
}
Тот же код работает для пагинации основной записи, который выводится на отдельной странице шаблона, но не работает для пагинации пользовательской записи.
Может ли кто-нибудь помочь мне найти решение, чтобы ссылки на пагинацию для пользовательской записи заработали?
Надеюсь на совет,
Ead
Используйте следующее:
$args = array(
'post_type' => '[custom post type name]',
'paged' => $paged,
'has_archieve' => true
);
$catquery = new WP_Query($args);
echo pagination_bar($catquery);
Единственное решение, которое сработало для меня, заключается в добавлении фильтра действия в functions.php в следующем формате:
add_action('pre_get_posts', function($q){
if (is_category()){
if(is_category('NEWS')):
$q->set( 'posts_per_page', 2 );
endif;
}
});
.
Ответ или решение
У вашей проблемы связанной с пагинацией пользовательского типа записей, таких как "office-magazines", может быть несколько причин появления ошибок. Давайте подробно разберем и найдем корректное решение.
Проблема и Возможные Решения
-
Проблема с Переменной
$loop
:
Вы используете$loop
в вызовеcustom_pagination_bar($loop)
, однако в вашем коде эта переменная не определена. Вам следует использовать$catquery
, который и является объектомWP_Query
в данном контексте.<p class="pagination"> <?php echo custom_pagination_bar($catquery); ?> </p>
-
Вызов
global $wp_query
:
Обратите внимание, что вы используетеglobal $wp_query
. Это необходимо выполнять только в том случае, если вы хотите модифицировать главную запросную переменную. Для пользовательского запроса сWP_Query
это не требуется. Убедитесь в том, что вы правильно понимаете, какой именно query вы хотите использовать для пагинации. -
Формат Базовой Ссылки и Влияние Динамических УРЛ:
Проверьте, корректно ли настроен ваш.htaccess
и структура постоянных ссылок в WordPress (перейдите в Настройки > Постоянные ссылки и сохраните изменения, это может помочь решить проблему с постоянными ссылками). -
Добавление
has_archive
:
Вы указалиhas_archieve
в аргументах WP_Query, однако правильный атрибут для этого —has_archive
. Исправьте возможную опечатку в коде. -
Определение Query_vars:
Убедитесь, что передан правильный параметрpaged
, особенно при использовании его в вашем шаблоне и в функции пагинации.
Оптимизированный Код
Здесь представлены исправления, которые должны позволить вам добиться корректной работы пагинации:
Код В Шаблоне
<?php
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$args = array(
'post_type' => 'office-magazines',
'posts_per_page' => 9,
'paged' => $paged,
'has_archive' => true, // Исправлено слово 'has_archieve'
);
$catquery = new WP_Query($args);
?>
<p class="pagination">
<?php echo custom_pagination_bar($catquery); // Исправлено имя переменной ?>
</p>
Функция Пагинации
function custom_pagination_bar($custom_loop) {
$big = 999999999; // уникальный идентификатор
echo paginate_links(array(
'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
'format' => '?paged=%#%',
'current' => max(1, get_query_var('paged')),
'total' => $custom_loop->max_num_pages,
));
}
Дополнительные Советы
- Убедитесь, что ваш файл
functions.php
не конфликтует с другими плагинами или темами, которые могут управлять выводом записей или пагинацией. - Протестируйте страницу в режиме отладки WordPress, чтобы выявить возможные ошибки.
- Рассмотрите использование Плагина, который управляет контекстом и пагинацией, чтобы тупо автоматизировать этот процесс.
Следуя этим шагам, вы сможете устранить основные проблемы с пагинацией вашего пользовательского типа записи.