Используйте wp_query с несколькими типами записей, но примените meta_query только к одному типу записей

Я хотел бы wp_query для всех заданных мной post_types и применить фильтр к одному из четырех post_types без исключения записей других post_types.

Например, я хотел бы найти все сообщения, которые имеют P110612 в этом. Этот код является sku WooCommerce.

Так что для того, чтобы я запросить на _sku ключ, я применяю это как meta_query.

Но для того, чтобы я не исключал посты без мета-ключа _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

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]