Intereting Posts
Возможно ли иметь разбиение на страницы со смещением? Первая статья: один столбец; Другие статьи: 2 столбца Разбор короткого кода через текстовое поле автора Предупреждение! Безопасный режим PHP включен! фильтровать RSS-канал в URL-адресе Как добавить параметр в список шаблонов страниц из плагина? Листинг только пользовательских типов сообщений с двумя требуемыми категориями? Выбор цвета в виджетах появляется дважды при добавлении через Customizer Не удается заставить url_to_postid работать Добавить категории товаров wooCommerce в качестве меню боковой панели с коротким кодом на главной странице Как добавить CSS-класс в previous_post_link или получить URL-адрес предыдущего / следующего сообщения Ограничить загрузчик WP для определенных типов файлов только на страницах Как управлять большой коллекцией файлов с помощью WordPress? WP Editor разделяет атрибут атрибута ввода Как установить значение по умолчанию в качестве сохраненного значения после сохранения формы виджета?

Пользовательский заказ на главную страницу

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

Сейчас я использую строку запроса для определения порядка сортировки. Например: http://example.com/?sort=popular или http://example.com/?sort=trending . Затем в home.php я проверяю строку запроса и редактирую предложение wp_query .

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

В home.php

 /** * check query for most popular. */ function check_for_popular() { return get_query_var('sort') == "popular"; } function mp_home_loop() { global $wp_query; if( check_for_popular() ) { $query = $wp_query->query_vars; $wp_query = new WP_Query( wp_parse_args( array( 'meta_key' => 'popularity_score', 'orderby' => 'meta_value_num', 'order' => 'DESC', ), $query ) ); } include( CHILD_DIR . '/mp_home_loop.php' ); } 

В functions.php

 add_filter('query_vars', 'add_query_vars' ); function add_query_vars( $qvars ) { $qvars[] = 'sort'; return $qvars; } 

С точки зрения именования кажется, что термин «фильтр» будет более уместным, поскольку сначала вы фильтруете по критериям, а затем при заказе применяется сортировка (направленность). Но это скорее точка зрения на именование …

Из структуры кода, если вы используете метод check_for_popular() в нескольких местах, имеет смысл структурировать его так же, как и вы. Если это только для фильтрации функции, я бы пошел с оператором switch в args для WP_Query а затем выполнил запрос. Что-то в этом роде:

 function mp_home_loop() { global $wp_query; $filter_args = array(); switch( get_query_var('sort') ){ case 'popular': $filter_args = array( 'meta_key' => 'popularity_score', 'orderby' => 'meta_value_num', 'order' => 'DESC' ); break; case 'trending': // obviously assign your own query args $filter_args = array( 'meta_key' => 'trending_score', 'orderby' => 'meta_value_num', 'order' => 'DESC' ); break; } $wp_query = new WP_Query( wp_parse_args( $filter_args, $wp_query->query_vars ) ); include( CHILD_DIR . '/mp_home_loop.php' ); } 

В зависимости от того, как этот запрос используется (например, если он управляет вашим основным запросом), вы можете перенести его дальше на крючок pre_get_posts; однако, поскольку вы упомянули, что именно для домашней страницы я предполагаю, что у вас есть этот отдельный подраздел страницы.