問題描述

我試圖查詢相簿系統的自定義帖子型別。我有一個核取方塊來設定一個畫廊作為一個”featured” 畫廊 (透過更多欄位外掛設定) – 如果這是檢查,那麼元值將變為 1,然後如果未選中,它變為 0. 所有好。但是,如果該框尚未被檢查,那麼元鍵從不被建立,這意味著我不能查詢 NOT LIKE 1,因為它不存在。

我想要的查詢是拉出 4 個沒有標記為’1’ 在這個元值中的畫廊,還有那些沒有這個值的畫廊。有沒有辦法總是給新新增的帖子一個這個元鍵的預設值 (如果該框不被選中,總是預設為 0) 或有沒有辦法來查詢尚未設定的鍵?

我當前的查詢是:

$args = array(
                        'post_type' => 'gallery',
                        'showposts' => 4,
                        'meta_key' => 'gal-ID',
                        'order_by' => 'meta_value',
                        'order' => 'ASC',
                        'meta_query' => array( array(
                                            'key' => 'main-gal',
                                            'value' => false,
                                        ) ),
                        ) );

而且我嘗試過’compare’ => ‘NOT LIKE’,’!=’ 等

有任何想法嗎?這張票似乎暗示這是一個應該整理的東西:

http://core.trac.wordpress.org/ticket/18158

謝謝!

最佳解決方案

這個巨大的功能有點嚇人,我得到了這樣的工作 – 有兩個引數 (排除功能)

$args = array(

    'meta_query' => array(
        'relation' => 'OR',
            array( // new and edited posts
                'key' => 'Set as Featured Post',
                'compare' => '!=',
                'value' => 1
            ),

            array( // get old posts w/out custom field
                'key' => 'Set as Featured Post',
                'value' => '1',
                'compare' => 'NOT EXISTS'
            )
        ),
    'posts_per_page' => 30

);

次佳解決方案

根據法典中的 Custom Field Parameters,自 WP 版本 3.5 起可以使用特殊的 NOT EXISTS 比較

從技術上講,它在帖子請求中產生如下面的 SQL 查詢:

$posts = get_posts( array(
    'meta_query' => array(
        array(
            'key'     => 'wrong',
            'compare' => 'NOT EXISTS',
        ),
    ),
) );
SELECT *,wp_posts.ID
FROM wp_posts
LEFT JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id AND wp_postmeta.meta_key = 'wrong')
WHERE 1=1 AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') AND (wp_postmeta.post_id IS NULL)
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC
LIMIT 0, 5

它透過在提供的金鑰上加入元表並且僅選擇沒有產生有意義的資料的記錄 (IS NULL) 來工作。所以它只適用於鍵不存在的情況,並且不適用於存在偽造值的鍵。

第三種解決方案

正如門票所指出的,它不受支援。直到那時,你將不得不依靠一個自定義的解決方案。

有幾個使用者以前曾經問過這個問題,或者至少問到如何在 WordPress.org 論壇上做到這一點,所以我寫了一個功能來完成我從來沒有持有的工作 (貼上),幸運的是我發現了原來的主題我提供了 pastebin 連結 (不應該過期) 。

http://pastebin.com/kgLt1RrG

我寫了 8 個月前,我沒有測試 (從那時起),所以讓我知道任何問題。

希望有幫助..

參考文獻

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