問題描述

Aa 你知道,從 WP3.0 開始,有自定義高級查詢的選項,這是非常好的。因此,對於新的 meta_query 參數 (see here),不推薦使用 meta_key,meta_value 等自定義字段的某些查詢參數,

我嘗試使用新的語法查詢一個非常簡單的查詢,由包含指定的 meta_key(order_in_archive) 的某個 post_type(服務) 查詢帖子 – 這是按預期方式進行的。但是 – 我想通過 meta_value 的查詢排序,沒有成功。

這是我的查詢 –

   query_posts(
    array(  'post_type' => 'services',
        'order' => 'ASC',
        'orderby' => 'meta_value',
        'meta_query' => array(
            array('key' => 'order_in_archive'))
    )
);

我也嘗試了 meta_value_numeric 和 meta_value 的訂單,但無論如何,結果正在發佈日期被排序 (作為常規帖子) 。任何人都知道如何做到這一點?

謝謝

最佳解決方案

您可以使用舊方法 (我在 WP 3.1.1 上測試) 定義 orderby 參數的元鍵…

query_posts(
    array(  'post_type' => 'services',
            'order'     => 'ASC',
            'meta_key' => 'some_key',
            'orderby'   => 'meta_value', //or 'meta_value_num'
            'meta_query' => array(
                                array('key' => 'order_in_archive',
                                      'value' => 'some_value'
                                )
                            )
    )
);

次佳解決方案

WP Codex 在解決這個問題時其實很混亂。

您實際上並不需要 meta_query 參數來使用 orderby,而是使用 meta_key 參數,儘管 WP Codex 已被棄用,但已經在此建立:How do you use orderby with meta_query in WordPress 3.1?,其順序依然需要 meta_key 。

所以應該是

query_posts( array(
  'post_type' => 'services',
  'order' => 'ASC',
  'orderby' => 'meta_value',
  'meta_key' => 'order_in_archive'
) )

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。