我想在包含[最流行、最新、趋势]的主页上显示一个下拉列表,当用户选择其中一个时,帖子将被页面重新加载,并按该顺序排序。
现在,我正在使用查询字符串来检测排序顺序。对于eg:http://example.com/?sort=popular
或http://example.com/?sort=trending
. 然后在home.php
我检查查询字符串并编辑wp_query
对象的orderby
条款
我想问一下,这是一种正确的方法,还是有更好的方法来处理这个案件?因为我还想处理分页和其他事情。
在家里。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\' );
}
在函数中。php
add_filter(\'query_vars\', \'add_query_vars\' );
function add_query_vars( $qvars ) {
$qvars[] = \'sort\';
return $qvars;
}
最合适的回答,由SO网友:codearachnid 整理而成
从命名的角度来看,术语“过滤器”似乎更合适,因为您首先按照标准进行过滤,然后在订购时应用排序(定向)。但这更多的是一种命名约定的观点。。。
如果使用check_for_popular()
方法,然后按照您所做的方式构造它是有意义的。如果这只是为了过滤函数,我会在args上使用switch语句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\\u get\\u posts挂钩中;然而,既然你提到这是为了主页,我假设你有这个页面的特定部分。