【问题标题】:WordPress/ACF: Sort Posts by multiple fieldsWordPress/ACF:按多个字段对帖子进行排序
【发布时间】:2015-08-07 23:41:15
【问题描述】:

我的帖子包含两个高级自定义字段“姓名”和“姓氏” 我需要查询帖子以使其处于正确的顺序。 姓名/姓氏/头衔

像这样: Doe,Joen,标题

我的查询看起来像这样

$args = array(

'numberposts' => -1,
'post_type' => array ('events'),
'meta_key' => 'name',
'orderby' => 'meta_value',
'order' => 'ASC',
'meta_query'=> array(
    array(
        'key' => 'date',
        'compare' => '<',
        'value' => $today,
        'type' => 'DATE',
        )),

);

如何以正确的方式排序帖子?

我试过这样的:

'orderby' => 'meta_value surname',

但我认为这不适用于自定义字段

谢谢!!!

++

非常感谢穆克什! 这行得通(我希望如此……)

    SELECT SQL_CALC_FOUND_ROWS * FROM wpdev_posts
    INNER JOIN wpdev_postmeta ON ( wpdev_posts.ID = post_id  ) 
    INNER JOIN wpdev_postmeta AS mt1 ON ( wpdev_posts.ID = mt1.post_id ) 
    INNER JOIN wpdev_postmeta AS mt2 ON ( wpdev_posts.ID = mt2.post_id ) 
    WHERE 1=1 AND ( wpdev_postmeta.meta_key = 'referent_name' )     AND ( mt1.meta_key = 'referent_vorname' )     

    AND ( ( mt2.meta_key = 'datum' AND CAST(mt2.meta_value AS DATE) < 20190527 ) ) 
    AND wpdev_posts.post_type = 'veranstaltungen' 
    AND (wpdev_posts.post_status = 'publish' 
    OR wpdev_posts.post_status = 'pending' OR wpdev_posts.post_status = 'confirmed' 
    OR wpdev_posts.post_status = 'paid' OR wpdev_posts.post_status = 'complete' 
    OR wpdev_posts.post_status = 'private') 


    GROUP BY wpdev_posts.ID 
    ORDER BY wpdev_postmeta.meta_value ASC, mt1.meta_value ASC, post_title ASC      

【问题讨论】:

    标签: wordpress advanced-custom-fields


    【解决方案1】:

    试试下面的代码,它会对你有所帮助。

    <?php 
        global $wpdb;
         $query = "SELECT SQL_CALC_FOUND_ROWS * FROM $wpdb->posts
                     INNER JOIN $wpdb->postmeta ON ( $wpdb->posts.ID = $wpdb->postmeta.post_id ) 
                     INNER JOIN $wpdb->postmeta AS mt1 ON ( wp_posts.ID = mt12.post_id ) 
                     INNER JOIN $wpdb->postmeta AS mt2 ON ( wp_posts.ID = mt2.post_id ) 
                     WHERE 1=1 AND ( $wpdb->postmeta.meta_key = 'name' ) AND ( mt1.meta_key = 'surname' ) 
                     AND ( ( mt2.meta_key = 'date' AND CAST(mt2.meta_value AS DATE) < $today ) ) ) 
                     AND $wpdb->posts.post_type = 'events' AND ($wpdb->posts.post_status = 'publish' 
                     OR $wpdb->posts.post_status = 'pending' OR $wpdb->posts.post_status = 'confirmed' 
                     OR $wpdb->posts.post_status = 'paid' OR $wpdb->posts.post_status = 'complete' 
                     OR $wpdb->posts.post_status = 'private') 
                     GROUP BY wp_posts.ID 
                     ORDER BY wp_postmeta.meta_value ASC, mt1.meta_value ASC ";
    
        $posts = $wpdb->get_results($query, object);
        echo '<pre>';print_r($posts);
    ?>
    

    【讨论】:

    • 谢谢,这看起来不错,但我只得到一个空数组,我将代码更改为这个,但它没有运行,请参阅我的第一篇文章
    • 你能在 mysql 中运行 sql 查询吗?你声明“$today”变量?
    • 在您更新的 sql 查询中,您使用三个元键“referent_name”、“referent_vorname”、“datum”对吗?发布它的 sql 查询对我来说工作正常
    • 非常感谢!!我想我工作! (查询见我的帖子)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    相关资源
    最近更新 更多