특정 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
않지만 ids
키가 colors
있을 때마다 (필요한 것과 반대 되는) 게시물이있는 게시물을 반환합니다 . 나는 EXIST
대신 노력 했지만 운이 없다.
누군가 내가 쿼리와 같은 쿼리를 작성하는 올바른 방법을 알려 줄 수 있다면 감사하겠습니다.
감사!
답변
나는 이것으로 더 많은 테스트를했고, 솔직히 그것이 작동하지 않는 이유를 찾을 수 없다 (위의 코드가 단지 스 니펫이고 실제 코드가 아래 예제에 적합하지 않다면). 그러나 올바른 방향으로 이끌 수있는 몇 가지 사실을 발견했습니다.
1)이 메타 쿼리 자체는 “colors IS NULL”과 같습니다. 즉 postmeta 테이블에 해당 키가 설정되지 않은 게시물을 반환합니다. 이것은 위에 표시된 경우이며 작동해야합니다.
'meta_query' => array(
array(
'key' => 'colors',
'compare' => 'NOT EXISTS' // this should work...
),
)
2) WordPress 3.9 이전에는 ‘관계’색인을 ‘OR’로 설정하면이 조건이 변경됩니다. 반대를 돌려줍니다. 이유를 묻지 마십시오. 이것은 여러 메타 쿼리를 수행 할 때 특히 중요합니다. 즉, ‘colors’키가 ‘blue'(또는 무엇이든)로 설정되었거나 전혀 설정되지 않은 게시물에 대해 처음에는 쿼리를 수행 할 수 없습니다. 아래 쿼리는 첫 번째 조건을 무시하고 두 번째 조건과 일치하는 조건 만 반환합니다.
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'colors',
'compare' => 'NOT EXISTS' // doesn't work
),
array(
'key' => 'colors',
'value' => 'blue'
)
)
3) 그러나 ‘값’을 설정하면 첫 번째 조건을 사용하여 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.9까지 적용되었습니다. 여전히 이전 버전을 사용중인 경우이 방법은 실행 가능한 해결 방법입니다.
답변
사용자 정의 쿼리를 사용하면 다음과 같이 작동했습니다.
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
)