Как добиться нескольких страниц на одной странице в WordPress

Я пытаюсь реализовать базовую функциональность, которая могла бы реализовать несколько страниц для разных типов сообщений на одной странице.

Изначально я пытался сделать пользовательскую нумерацию страниц. Например, прямо сейчас я передал номер страницы в качестве параметра URL.

Новости КПТ

/release/?page_news=1

/release/?page_news=2 ...

Ресурс CPT

/release/?page_resource=1

/release/?page_resource=2 ...

Но выглядит неуклюже. Я думал, как это должно выглядеть

Ожидаемые новости CPT

/релиз/новости/

/релиз/новости/2 ...

Ресурс CPT

/выпуск/ресурс/

/выпуск/ресурс/2 ...

Пожалуйста, дайте мне знать, если у кого-нибудь есть лучший подход к этой ситуации.


50
1

Ответ:

Решено

Я попробовал ниже, чтобы это работало.

Создана пользовательская перезапись

  1. Регистрация переменных запроса. Код добавляет var1 и var2 в качестве пользовательских переменных запроса с помощью фильтра query_vars.

  2. Правило перезаписи: создается пользовательское правило перезаписи, которое сопоставляет URL-адреса в формате /payments-slug/var1-value/var2-value/ и перезаписывает их в соответствующие index.php с соответствующими параметрами запроса.

<?php
global $wp;
@$wp->add_query_var('var1');
@$wp->add_query_var('var2');

add_filter('query_vars', 'wpse12965_query_vars');
function wpse12965_query_vars($query_vars)
{
  $query_vars[] = 'var1';
  $query_vars[] = 'var2';
  return $query_vars;
}
add_action('init', 'wpse12065_init');
function wpse12065_init()
{
  global $payments_page_id;
  $post = get_post($payments_page_id);
  $slug = @$post->post_name;
  add_rewrite_rule(
    $slug . '(/([^/]+))?(/([^/]+))?/?(/([^/]+))?(/([^/]+))?/?',
    'index.php?pagename=' . $slug . '&var1=$matches[2]&var2=$matches[3]',
    'top'
  );
}

Для разбиения на страницы добавлен фрагмент кода ниже внутри каждого wp_query.

  1. Всего страниц и диапазона: рассчитывается общее количество страниц и задается диапазон отображаемых ссылок на страницы.

  2. Цикл пагинации: он перебирает все страницы и генерирует список номеров страниц в виде ссылок. Текущая страница выделена, а на другие страницы имеются ссылки.

  3. Вывод: каждая ссылка на страницу ведет на URL-адрес, основанный на названии таксономии ($taxName) и номере страницы.

<div class = "pagination">
    <div class = "moreCenter animateme animated">
        <div class = "paginationBox">
            <?php
            $totalPages = $wc_query->max_num_pages;
            $range = 4;
            $showitems = ($range * 2) + 1;
            for ($i = 1; $i <= $totalPages; $i++) {
                if (1 != $totalPages && (!($i >= $paged + $range + 1 || $i <= $paged - $range - 1) || $totalPages <= $showitems)) {
                    $page_url = get_permalink() . '' . $taxName . '/' . $i;
                    echo ($paged == $i) ? "<span class=\"current\">" . $i . "</span>" : "<a href='" . $page_url . "' class=\"inactive\">" . $i . "</a>";
                }
            }
            ?>
        </div>
    </div>
</div>