問題描述
我正在嘗試獲取查詢以檢索所有不存在特定 meta_key 的帖子,然後建立它。
我在查詢這些帖子時遇到問題,因為我正在測試的查詢似乎不起作用。
以下是我正在使用的程式碼來嘗試獲取這些帖子:
$args = array(
'posts_per_page' => 18,
'cat'=>1955,
'post_status'=>'publish',
'meta_query' => array(
array(
'key' => 'colors',
'compare' => 'NOT EXISTS'
),
));
query_posts($args);
如果沒有關鍵字 colors 的帖子,則不返回任何內容,但是隻要該鍵存在 (與我需要的相反),就可以使用鍵 colors 返回他們的 ids 。我試過 EXIST 而不是運氣。
如果有人可以提示我正確的建立一個我需要的查詢的方式,我會很感激。
謝謝!
最佳解決方案
我做了一些更多的測試,而且老實說,找不到一個不起作用的原因 (除非上面的程式碼只是一個程式碼段,真正的程式碼適合我的例子) 。但是,我確實發現了一些可能導致你朝著正確方向發展的事情。
1) 這個元查詢本身就等同於 「顏色 IS NULL」,即它將返回 postmeta 表中沒有該金鑰集的帖子。這是上面顯示的情況,它應該有效。
'meta_query' => array(
array(
'key' => 'colors',
'compare' => 'NOT EXISTS' // this should work...
),
)
2) 建立’relation’ 索引到’OR’ 雖然改變了這個條件。反之亦然不要問我為什麼這在執行多個元查詢時尤其重要。這意味著最初不可能對’colors’ 鍵設定為’blue'(或任何) 或不設定的帖子進行查詢。下面的查詢將忽略第一個條件,只返回與第二個條件匹配的條件。
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'colors',
'compare' => 'NOT EXISTS' // doesn't work
),
array(
'key' => 'colors',
'value' => 'blue'
)
)
3) 但是,如果我們設定’value’,我們可以愚弄 WordPress 使用第一個條件。它不需要相關的值 (據我所知,它被忽略),但是需要設定它才能使 NOT EXISTS 條件有效果。
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'colors',
'compare' => 'NOT EXISTS', // works!
'value' => '' // This is ignored, but is necessary...
),
array(
'key' => 'colors',
'value' => 'blue'
)
)
WordPress 3.5 這是真的。也許這是無意的,他們會在以後的版本中修復它,但是可能會有一個這樣的原因,這是一個可行的解決方法。
次佳解決方案
使用自定義查詢,這對我有用:
SELECT * FROM wp_posts as posts
WHERE posts.post_type = 'post'
AND NOT EXISTS (
SELECT * FROM `wp_postmeta`
WHERE `wp_postmeta`.`meta_key` = "your_meta_key"
AND `wp_postmeta`.`post_id`=posts.ID
)
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。