Здравствуйте.
Есть WP-сайт, двуязычный, с применением метаполей ACF. Все работает отлично, за странным исключением.
Мне нужно получить метаполе поста, которое имеет два числовых значения для разных языков (например, стоимость в рублях и евро), с помощью WP_Query. Кто не знает, в базе это отображается так:
<!--:en-->2000<!--:--><!--:ru-->62300<!--:-->
// или так, в зависимости от версии qTranslate
[:en]2000[:ru]62300[:]
На самом сайте все переводится и отображается нормально, где надо нужные данные, в зависимости от языка.
Пишу запрос, с
compare =, но понятно что WP ищет по «сырым данным», которые в базе, а не по чистому числу. Как это можно обойти, подсунув уже обработанные qTranslate данные?
В value можно указывать REGEXP, но это костыль, как мне кажется, ибо это все равно аналог LIKE и будет нечисло (соответственно, нельзя проводить математические операции).
Кто-нибудь сталкивался с таким, что можно предпринять еще?
$query = new WP_Query(array(
'category_name' => 'category',
'posts_per_page' => -1,
'post_status' => 'publish',
'order' => 'DESC',
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'field',
'value' => '<!--:en-->62300<!--:--><!--:ru-->2000<!--:-->', // Так работает при строгом соответствии
// 'value' => '2000', // так не работает, только если compare LIKE
'compare' => '=',
)
)
));
["request"]=>
string(506) "SELECT wp_posts.* FROM wp_posts LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) WHERE 1=1 AND (
wp_term_relationships.term_taxonomy_id IN (4)
) AND (
( wp_postmeta.meta_key = 'category' AND wp_postmeta.meta_value = '<!--:en-->2000<!--:--><!--:ru-->62300<!--:-->' )
) AND wp_posts.post_type = 'post' AND ((wp_posts.post_status = 'publish')) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC "