2017-10-20 97 views
0

我有一个问题,我试图立刻解决,并有一个问题找到一种方法,做正确。WordPress的排序元值

我有一个大学系列讲座我需要梳理,我可以由元字段一年就好了排序。但是,当我到达的学期分类整理排序,排名不分,所以它最终由分拣冬,春,取决于如果我告诉它ASC或DESC在秋季或秋季,春季,冬季。

我需要弄清楚如何做到这才能以正确的顺序最好不添加其他领域的职位排序优先级目前写成如下这显然是有点乱

询问参数。

$args = array(
       'post_type' => 'mcm_geri-ed', 
       'posts_per_page' => $posts_per_page, 

       'meta_query' => array(
        'semester' => array(
         'key' => 'semester', 

       ), 
        'year' => array(
         'key' => 'year' 
       ) 
      ), 
       'orderby' => array(

        'year' => 'DESC', 
        'semester' => array(
        'value' => 'date' 
       ) 
      ), 
       'paged' => $paged 
      ); 

回答

1

我不认为有一种方法可以直接与WP_Query做到这一点。如何使用posts_orderby和操纵的订单部分的SQL是类似meta_year DESC, meta_semester = 'Spring' DESC, meta_semester = 'Fall' DESC。看看生成的SQL,看看你应该为meta_year和meta_semester(或者是三个月)使用什么名字。

这是不是改变学期数值并添加名称,而输出为有效,但它会奏效。

+0

我也会推荐这个 - 或者选择它们并手动进行排序,如果没有太多的话。尽管如此,应该可以使用WP_Query。 – Mikk3lRo

+1

我同意这个原则,但我最好使用'FIND_IN_SET(meta_semester,'Fall,Spring,Winter')ASC'。 FIND_IN_SET返回第二个逗号分隔字符串中第一个参数的位置,所以它们只需按照希望的顺序在那里列出。 – CBroe

+1

我在收到一小时的尝试后收回我对WP_Query的评论。尽管你可以[添加技能](https://gist.github.com/mikeschinkel/6402058)。按照janh的建议使用'posts_orderby'挂钩相当容易。 – Mikk3lRo

0

这是我最终做到了。它与建议的不同之处在于使用了建议的过滤器来获得结果。由于我为页面模板构建了一个排序系统,if语句还添加了一些其他注意事项。我也在测试环境中写了这个,因此与原始代码不同的帖子类型。

// Custom Orderby filter to return the correct order for semester values. 
add_filter('posts_orderby', 'orderby_pages_callback', 10, 2); 
function orderby_pages_callback($orderby_statement, $wp_query) { 
    //Making sure this only happens when it needs to. Which is the right post type and if it isn't getting sorted by other functions. 
    if ($wp_query->get("post_type") === "test_semester" && !is_admin() && !isset($_GET['order']) && !isset($_GET['sort'])) { 
     return "CAST(mt1.meta_value AS CHAR) DESC, wp_postmeta.meta_value = 'Fall' DESC, wp_postmeta.meta_value = 'Winter' DESC, wp_postmeta.meta_value = 'Spring' DESC,wp_postmeta.meta_value = 'Summer' DESC"; 

    } else { 
     //return your regularly scheduled programming 
     return $orderby_statement; 
    } 
}