指定されたすべての post_types を wp_query し、他の post_types の投稿を除外せずに、4 つの post_types の 1 つにフィルターを適用したいと思います。
たとえば、その中にあるすべての投稿を見つけたいと思いますP110612
。このコードは WooCommerce sku です。
そのため、キーに対してクエリを実行するために、_sku
これを meta_query として適用します。
しかし、 meta key のない投稿を除外しないようにするために、次のよう_sku
に を作成できます。OR relation
'meta_query' => [
'relation' => 'OR',
[
'key' => '_sku',
'value' => 'P110612',
'compare' => 'LIKE',
],
[
'key' => '_sku',
'value' => 'completely',
'compare' => 'NOT EXISTS',
],
];
これは、sku P110612 を持つすべての製品投稿と、P110612 がコンテンツのどこかにあるすべての非製品投稿を表示する必要があります。しかし、結果は何もありません。
以下は、WordPress WP_Query によって実行されている実際のクエリです。
皆さんが私を助けてくれることを願っています!
SELECT prefix_posts.*
FROM prefix_posts
LEFT JOIN prefix_postmeta ON ( prefix_posts.ID = prefix_postmeta.post_id )
LEFT JOIN prefix_postmeta AS mt1 ON (prefix_posts.ID = mt1.post_id AND mt1.meta_key = '_sku' )
WHERE 1=1
AND prefix_posts.ID NOT IN (2,10,11,12)
AND (
(
(prefix_posts.post_title LIKE '%P110612%')
OR (prefix_posts.post_excerpt LIKE '%P110612%')
OR (prefix_posts.post_content LIKE '%P110612%')
)
)
AND (prefix_posts.post_password = '')
AND (
( prefix_postmeta.meta_key = '_sku' AND prefix_postmeta.meta_value = 'P110612' )
OR mt1.post_id IS NULL
)
AND prefix_posts.post_type IN ('page', 'newsitem', 'partner', 'product')
AND ((prefix_posts.post_status = 'publish'))
GROUP BY prefix_posts.ID
ORDER BY prefix_posts.post_title LIKE '%P110612%' DESC, prefix_posts.post_date DESC