restalpo
@restalpo

WP + qTranslate + qTranslate ACF + ACF — как получить число из метаполя в wp_query?

Здравствуйте.

Есть 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 "
  • Вопрос задан
  • 474 просмотра
Пригласить эксперта
Ответы на вопрос 2
wppanda5
@wppanda5 Куратор тега WordPress
WordPress Mедведь
Как это можно обойти, подсунув уже обработанные qTranslate данные?

Никак qTranslate работает уже с полученными из базы данными
https://github.com/qTranslate-Team/qtranslate-x/bl...

А когда ему самому надо что то в базе он именно LIKE и пользует
Ответ написан
Комментировать
@ommunist
Делаю и поддерживаю мультиязычные сайты
qTranslate это путь в ад. Но если без него в проекте уже нельзя, то только REGEXP-ом по строке можете обрабатывать. Как правильно пишет WP Panda , он работает с уже полученными данными. А почему qTranslate это зло, потому что он увеличивает время загрузки пользователю страниц кратно количеству языков.

Наверное проверяете REGEXP-ом наличие цифр между тегами qTranslate, сохраняете это значение в переменную и дальше с ним оперируете.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
23 апр. 2024, в 11:46
3000 руб./за проект
23 апр. 2024, в 11:38
20000 руб./за проект