定制首页邮购

时间:2014-03-09 作者:Ahmed

我想在包含[最流行、最新、趋势]的主页上显示一个下拉列表,当用户选择其中一个时,帖子将被页面重新加载,并按该顺序排序。

现在,我正在使用查询字符串来检测排序顺序。对于eg:http://example.com/?sort=popularhttp://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;
}

1 个回复
最合适的回答,由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挂钩中;然而,既然你提到这是为了主页,我假设你有这个页面的特定部分。

结束