Пользовательские ссылки на страницы не работают.

Вопрос или проблема

Я поднимаю вопрос, который не удалось решить после нескольких дней поиска решений в 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", может быть несколько причин появления ошибок. Давайте подробно разберем и найдем корректное решение.

Проблема и Возможные Решения

  1. Проблема с Переменной $loop:
    Вы используете $loop в вызове custom_pagination_bar($loop), однако в вашем коде эта переменная не определена. Вам следует использовать $catquery, который и является объектом WP_Query в данном контексте.

    <p class="pagination">
       <?php echo custom_pagination_bar($catquery); ?>
    </p>
  2. Вызов global $wp_query:
    Обратите внимание, что вы используете global $wp_query. Это необходимо выполнять только в том случае, если вы хотите модифицировать главную запросную переменную. Для пользовательского запроса с WP_Query это не требуется. Убедитесь в том, что вы правильно понимаете, какой именно query вы хотите использовать для пагинации.

  3. Формат Базовой Ссылки и Влияние Динамических УРЛ:
    Проверьте, корректно ли настроен ваш .htaccess и структура постоянных ссылок в WordPress (перейдите в Настройки > Постоянные ссылки и сохраните изменения, это может помочь решить проблему с постоянными ссылками).

  4. Добавление has_archive:
    Вы указали has_archieve в аргументах WP_Query, однако правильный атрибут для этого — has_archive. Исправьте возможную опечатку в коде.

  5. Определение 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, чтобы выявить возможные ошибки.
  • Рассмотрите использование Плагина, который управляет контекстом и пагинацией, чтобы тупо автоматизировать этот процесс.

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

Оцените материал
Добавить комментарий

Капча загружается...