creativeworm
@creativeworm

Как использовать posts_where и custom field?

Возможно ли сделать выборку постов с определенными custom field через posts_where?
Это решение выдает:
Ошибка базы данных WordPress: [Unknown column 'wp_postmeta.meta_key' in 'where clause']
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND (wp_postmeta.meta_key = `sarlab_time` AND wp_postmeta.meta_value >= '1') ORDER BY wp_posts.post_date DESC LIMIT 0, 10


Написал такой код:
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') IN (SELECT wp_postmeta.post_id FROM wp_postmeta WHERE meta_value = '77999')  ORDER BY wp_posts.post_date DESC LIMIT 0, 10
, но отдает 0 строк, хотя SELECT wp_postmeta.post_id FROM wp_postmeta WHERE meta_value = '77999' отдает 2 строки

В запросе можно редактировать только часть запроса:
IN (SELECT wp_postmeta.post_id FROM wp_postmeta WHERE meta_value = '77999')
  • Вопрос задан
  • 644 просмотра
Решения вопроса 1
creativeworm
@creativeworm Автор вопроса
Решено так:
global $wpdb;
$where .= " AND $wpdb->posts.ID IN (SELECT $wpdb->postmeta.post_id FROM $wpdb->postmeta WHERE meta_key = 'sarlab_time' AND meta_value IN ($for_where)) ";
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Вы что, руками пишете SQL-запросы? Бросьте это дело. Тем более вы подставляете в запрос к одной таблице колонку из другой без оператора JOIN - так не будет работать, и ответ Unknown column вполне логичен. Нет в таблице wp_posts колонки meta_key, а обращение wp_postmeta.meta_key не поможет - так SQL не работает. Нужен JOIN двух таблиц - wp_posts и wp_postmeta, и уже тогда работа с двумя колонками.

Есть фильтр posts_where и есть pre_get_posts, который более удобный - там прямо meta_query задаете и все, готово - JOIN будет корректно сделан за вас:

https://codex.wordpress.org/Plugin_API/Filter_Refe...
https://codex.wordpress.org/Plugin_API/Action_Refe...
https://codex.wordpress.org/Class_Reference/WP_Que...
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы