Es gibt eine einfache Abfrage mit zwei Meta-Bedingungen.Warum ignoriert Wordpress meta_query-Bedingungen?
$defaults = array(
'post_type' => 'products',
'orderby' => 'date',
'order' => 'DESC',
);
if($is_deadline) { // true, I checked
$defaults['meta_key'] = 'deadline',
$defaults['meta_type'] = 'NUMERIC',
$defaults['meta_value'] = (int)current_time('Ymd');
$defaults['meta_compare'] = '>=';
$defaults['meta_query'] = array(// this query will be ignored
'relation' => 'OR',
array(
'key' => 'deadline',
'value' => '',
'compare' => '='
)
);
}
Aber ich habe ein Problem: Wordpress ignoriert Meta-Abfrage-Block. Mit anderen Worten sieht $ query-> Anfrage wie folgt aus (ohne mit leeren String vergleichen):
SELECT adveq_posts.* FROM adveq_posts
INNER JOIN adveq_postmeta ON (adveq_posts.ID = adveq_postmeta.post_id) WHERE 1=1
AND (
(adveq_postmeta.meta_key = 'deadline' AND CAST(adveq_postmeta.meta_value AS SIGNED) >= '20160629')
)
AND adveq_posts.post_type = 'products'
AND (adveq_posts.post_status = 'publish'
OR adveq_posts.post_status = 'private')
GROUP BY adveq_posts.ID
ORDER BY adveq_posts.post_date DESC
Dieses Problem fliegt weg, wenn ich Bezug auf ‚UND‘ - meta_query nicht mehr ignoriert. Aber ich brauche ODER, nicht UND. Ich habe eine andere Variante versucht, nur mit Meta_Query.
$defaults = array(
'post_type' => 'products',
'orderby' => 'date',
'order' => 'DESC',
);
if($is_deadline) { // true, I checked
$defaults['meta_query'] = array(
'relation' => 'OR',
array(
'key' => 'deadline',
'value' => (int)current_time('Ymd'),
'type' => 'NUMERIC',
'compare' => '>='
),
array(
'key' => 'deadline',
'value' => '',
'compare' => '='
)
);
}
Aber in diesem Fall Wordpress ignoriert meta_query wie möglich, so viel. Selbst wenn relation = 'AND' ist, gibt es immer noch ein Problem und das WP-Verhalten ist genau dasselbe.
SELECT adveq_posts.* FROM adveq_posts
WHERE 1=1 AND adveq_posts.post_type = 'structured_products'
AND (adveq_posts.post_status = 'publish' OR adveq_posts.post_status = 'private')
ORDER BY adveq_posts.post_date DESC
Irgendwelche Vorschläge? Vielleicht ist das ein WP-Kernfehler? Dieses Verhalten ist sehr seltsam und unlogisch.
Okay, aber in WP_Query bereits mit WP_Meta_Query. Wenn Sie den Quellcode einsehen, können Sie dies hier sehen: [link] (https://core.trac.wordpress.org/browser/tags/4.5.3/src/wp-includes/query.php#L2502). Aufruf-Kette ist: Abfrage-> get_posts-> WP_Meta_Query. Ich habe Arbeitsergebnis nur, wenn ich 'Pre_get_posts'-Filter und modifizierte Abfrage im letzten Moment direkt verwendet. – Raymond