Intereting Posts
Список листинга плагинов WP Business Directory? Как получить выбранную таксономию или идентификатор категории при использовании пользовательского ходока? получить последние 5 сообщений и конкретную запись и отсортировать в определенном порядке Как для массового удаления всех подписчиков WordPress? Как вы изменяете «post_parent» настраиваемого типа сообщений? WP_Query с несколькими фильтрами мета-полей? Как отобразить список сообщений CPT в мета-окне на странице меню? пожара, когда пост редактируется, а также сохраняется? Админы не могут редактировать сообщения друг друга Отображать дочерние страницы на родительской и дочерней странице с помощью Featured Thumbnails Пользовательская таксономия CountPost WordPress WordPress 3.6 Короткие коды видео в шаблоне Есть ли способ проверить, какие категории wordpress были созданы с помощью какого пользователя? Заменить css с использованием отрицательных условных тегов Поддерживает ли WordPress ресурсы шаблонов / настраиваемые поля

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

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

Сейчас я использую строку запроса для определения порядка сортировки. Например: 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; } 

Solutions Collecting From Web of "Пользовательский заказ на главную страницу"

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

Из структуры кода, если вы используете метод 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; однако, поскольку вы упомянули, что именно для домашней страницы я предполагаю, что у вас есть этот отдельный подраздел страницы.