Пагинация древесины с пользовательским запросом дает мне 404 - PullRequest
0 голосов
/ 06 ноября 2018

Я новичок в Wordpress. Я много смотрел на StackOverflow для решения этой проблемы, но ни один не работал для меня. Я использую Timber и ACF.

Вот ситуация: я сделал 4 пользовательских post_type (Новости, Продукты, Услуги и Места). Я создал пользовательскую страницу для новостей. ( page-news.twig )

В моем файле page.php я добавил пользовательский запрос, подобный этому:

global $paged;

if (!isset($paged) || !$paged) {
    $paged = 1;
}

$context = Timber::get_context();
$post = new TimberPost();
$context['post'] = $post;

$args = array(
    'post_type' => 'news',
    'posts_per_page' => 3,
    'paged' => $paged,
    'page' => $paged
);

$context['news'] = new Timber\PostQuery($args);

Итак, я установил максимум постов для страницы, который равен 3, и в моем файле .twig:

    {% for single_news in news %}
{% include['news.twig', single_news] %}
{% endfor %}

{% if news.pagination.prev %}
<a href="{{news.pagination.prev.link}}" class="prev {{ news.pagination.prev.link|length ? '' : 'invisible'}}">Prev</a>
{% endif %}

{% if news.pagination.next %}
<a href="{{ news.pagination.next.link}}" class="next {{ news.pagination.next.link|length ? '' : 'invisible'}}">Next</a>
{% endif %}

Когда я захожу на страницу новостей, на каждой странице 3 сообщения (верно), и отображается якорь Next, который является правильным. Проблема в том, что ссылка приводит меня к /news/page/2, который не существует и выдает ошибку 404. Я пробовал много решений, таких как pre_get_posts, и ни одно из них не сработало для меня.

1 Ответ

0 голосов
/ 11 ноября 2018

Нумерация страниц работает только на страницах архива, но не на отдельных страницах. См. Иерархия шаблонов WordPress для того, что считать страницей архива.

Это означает, что вы не можете использовать page.php в качестве файла шаблона для отображения своих новостей. У вас есть две возможности здесь:

  1. Вы можете использовать archive.php или даже archive-news.php , если ваш пользовательский тип сообщения для новостей называется news.
  2. Если вы используете тип сообщения по умолчанию post для раздела новостей, вы можете выбрать страницу, на которой вы хотите отобразить архив сообщений. Файл шаблона для отображения вашего архива сообщений будет тогда home.php .

Если вы выберете первый вариант, вам необходимо убедиться, что при регистрации типа записи (либо через register_post_type(), либо через плагин) вы установите для параметра public значение * 1027. * и что вы также установите has_archive на true.

Проблема с архивными страницами заключается в том, что теперь вы не можете использовать некоторые функции редактирования, которые у вас обычно есть со страницами. Для архива вы не можете установить заголовок или добавить контент в редакторе, как вы используете для страниц. Но если вы используете ACF, вы можете настроить страницу параметров , где вы добавите выбор для «Страницы для новостей». Назовите его page_for_news, а затем в своем файле шаблона вы можете выбрать правильный пост, который Timber должен использовать на странице архива с

$post = new Timber\Post( get_field( 'page_for_news', 'option' ) );

Этот метод практически копирует вариант 2 для пользовательских типов записей.

Кроме того, подсказка о вашем новостном сообщении включена в Twig:

{% for single_news in news %}
    {% include['news.twig', single_news] %}
{% endfor %}

Если вы сделаете это, Twig попытается найти шаблон news.twig , а также шаблон с именем single_news. Но single_news здесь не строка, а экземпляр Timber\Post. Так что это тебе не поможет. Вместо этого вы можете использовать следующее:

{% for single_news in news %}
    {% include 'news.twig' %}
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...