Вопрос: Следует ли использовать category.php и The Loop, если запрос должен быть настраиваемым?

Мне нужно, чтобы пользователь мог сортировать и фильтровать сообщения при просмотре категории. Правильный способ сделать страницу категории - это использовать категорию (- {id} /{slug}). Php, но использование этого автоматически создает цикл, поэтому независимо от того, какой метод я использую для сортировки и фильтрации постов, которые он будет делать другой цикл.

В этом случае я должен создать файл, который не называется category (- {id} /{slug}). php, и каким-то образом связать его с категориями, или лучше просто проигнорировать что два цикла создаются независимо от того, что и один из них не будет использоваться?

Также в этом случае снова используется цикл, но с измененным запросом, более эффективный, чем get_posts ()? р> <

Ответы и комментарии:

Возможно ли, чтобы запрос, который я хочу, был настолько сложным, что его нельзя было выполнить только с помощью WP_Query? Мне может понадобиться написать это на SQL. В таком случае у меня не останется выбора, кроме как оставить основной запрос неиспользованным?
Создан 27-02-2017 03:09 Nadroev

Что ж, вы можете выполнять много сложных запросов с помощью WP_Query, посмотрите функцию get_posts (), чтобы узнать, какие хуки доступны: core.trac.wordpress.org/browser/tags/4.7.2/src/wp-includes/…. Однако, ради аргумента, скажем, ваш запрос не может быть обработан всеми этими хуками, тогда должна быть возможность расширить WP_Query с вашим пользовательским классом, который может обрабатывать запрос. Я не пробовал это, потому что я никогда не нуждался в этом. Но я не понимаю, почему это невозможно сделать.
Создан 27-02-2017 04:03 Fayaz

Если есть главный запрос, несмотря ни на что, то какой смысл когда-либо использовать что-либо, кроме pre_get_posts?
Создан 27-02-2017 02:09 Nadroev

Наличие нескольких запросов / циклов? Не зная о крючке? :)
Создан 27-02-2017 03:24 kraftner

Да, следует использовать цикл и шаблон определенной категории, даже если вы хотите настроить запрос. Зачем?:

Даже с пользовательской страницей основной запрос будет выполняться. Таким образом, с пользовательской страницей вы фактически не избегаете основного запроса, а просто заменяете его другим запросом.
Сам основной запрос настраивается.
Если вы отклоняетесь от поведения WordPress по умолчанию, вам будет трудно поддерживать его в будущем, особенно это будет затруднительно для других разработчиков в случае, если кто-то другой возьмет на себя вашу работу в будущем.

Как изменить основной запрос:
К счастью, WordPress чрезвычайно настраиваемый, что означает, что основной запрос (цикл) также настраивается. Вы можете использовать хук действия pre_get_posts или функцию query_posts (), чтобы изменить основной запрос. Однако рекомендуется использовать хук pre_get_posts.
Например, скажем, вы хотите изменить порядок сообщений в категории на основе возрастающего порядка даты. Для этого вы можете использовать следующий код в файле functions.php вашей темы:
add_action ('pre_get_posts', 'wpse258109_customize_category_query');
function wpse258109_customize_category_query ($ query) {
    if (! is_admin () && $ query-> is_main_query () && $ query-> is_category ('your-category-slug'))) {
        // получаем значение orderby из любой точки мира и устанавливаем его в основном запросе
        $ query-> set ('orderby', массив ('date' => 'ASC'));
    }
}

Этот КОД изменит поведение основного запроса по умолчанию, а сообщения вашей категории для страницы архива вашей категории-слаг будут загружаться в порядке возрастания. Конечно, вы можете внести любые изменения в этот основной запрос так же, как и в любой пользовательский запрос с использованием класса WP_Query.
Создан 27-02-2017 03:59

Прежде всего: здорово, что вы думаете о потраченном впустую запросе! :)
Второе: WP всегда выполняет основной запрос независимо от того, что вы делаете. Но вы можете изменить этот запрос вместо того, чтобы игнорировать его и создать вторичный цикл. Это можно сделать с помощью хука pre get posts.
Создан 27-02-2017 01:33 kraftner4,24612041