Павел: Да я в вордпресс 2 день как залез и очень непривычно. Не могут написать здесь указываешь таблицу, тут поле. Всё как то размыто и своими терминами.
Как мне отсортировать по полю post_meta.count
Буду признателен за помощь.
WildJust: а теперь еще раз? Это не сортировка по полям таблицы, а сортировка по данным поста, встроенным и произвольным полям. Никой SQL вы сюда не всунете. Каким образом у вас организован подсчет просмотров никому неизвестно, и вы нигде не указывали. Сделайте в постах произвольное поле "просмотры" и сортируйте посты по произвольному полю, без всяких велосипедов, а используйте о, что дает WP. В противном случае, если у вас данные хранятся в таблицах, работа с которыми не предусмотрена в WP, то вам нужно писать свой собственный запрос в БД, свою пагинацию и все вытекающее.
WildJust: "meta_value_num - сортировка по произвольным полям, значения которых являются числами. " Да, все так. причем тут номер поля? Вы просто сообщаете, что у вас там числа, а не строки. А название произвольного поля задается в параметре meta_key - об этом в документации указано. И посмотрите, что такое произвольные поля в WP. Это НЕ любое поле из любой таблицы. https://codex.wordpress.org/Custom_Fields
Павел: Не совсем. JOIN clause, точно так же как WHERE спокойно фильтруется в WP. Просто надо понимать структуру той таблицы и отношения между ними, а этого в вопросе как раз нет.
$args = array(
'meta_key' => 'count', // поле, по которому сортируем
'orderby' => 'meta_value_num', // используем его как число
'order' => 'DESC', // обратный порядок
);
$wp_query = new WP_Query( $args );
Если данные хранятся в другой таблице - используйте хуки posts_join и posts_orderby. Первым забираете данные из вашей таблицы, вторым делаете сортировку.
WildJust: Чтобы решить задачу, нужно понимать структуру той таблицы и связи. Основной запрос в WP (он же Main Query) фильтруется на нескольких этапах, там можно и JOIN, и WHERE модифицировать, соответственно прилепить выборку из другой таблицы можно, и потом по полученным данным отсортировать. Но надо видеть структуру.
WildJust: то есть id в таблице post_views это не primary/autoincrement, а внешний ключ который соответствует id поста в таблице wp_posts? В этом случае делайте JOIN через упомянутый выше фильтр по этому id, забирайте колонку count и по ней сортируйте во втором фильтре orderby.
WildJust: нет, в $wp_query не надо. Есть и другие фильтры, но в вашем случае posts_join и posts_orderby - именно то, что нужно. Разберетесь как ими пользоваться? Документация по ссылкам достаточно базовая, но понятная. Если ее мало - гуглите конкретно по названиям этих фильтров, в сети есть тюториалы на эту тему.
Игорь Воротнёв: Игорь Воротнёв: сейчас это работает так
rewind_posts(), который собирает данные через $wp_query, + в нем хранятся и пагинация и другие параметры запроса.
WildJust: Нет, этими фильтрами вы будете модифицировать изначально как раз глобальный, основной $wp_query. На выходе будет именно он, только уже с вашим произвольным JOIN и ORDERBY. И будет вам пагинация, будет все что нужно.