Intereting Posts
Внедрение пользовательских тегов / налоговых страниц Типы XML-RPC и пользовательских сообщений Получить комментарий Автор ID на лету во время публикации Используя миниатюры разных размеров на разных частях моего сайта … с функциями functions.php? Несколько шаблонов для настраиваемого типа сообщений Как получить информацию о типе сообщения? Как удалить меню WP из панели администратора? Цикл, похоже, застрял в одном (теперь удаленном) сообщении Сохранить значения метаданных в виде массива в wp_postmeta Родительский образ всего списка больших пальцев, созданных при загрузке WordPress, не получая правильных разрешений IIS Пользовательский запрос в верхней части страницы поиска архива, аргументы переопределены Переустановка WordPress без потери данных deactivated_plugin hook: получить имя плагина Как объединить эти 2 запроса Я хотел бы удалить URL и описание из заголовка

Как отфильтровать дату dd / mm / yyyy из настраиваемого поля в запросе

Я пытаюсь создать запрос, чтобы отсортировать некоторые записи в настраиваемом поле даты, где даты форматируются dd / mm / yyyy.

Он работает, запрашивая базу данных напрямую с помощью get_results как в этом примере:

 $querystr = " SELECT * FROM wp_posts, wp_postmeta WHERE wp_posts.ID = wp_postmeta.post_id AND wp_postmeta.meta_key = 'my_cutom_date' AND wp_posts.post_status = 'publish' AND wp_posts.post_type = 'post' ORDER BY STR_TO_DATE(wp_postmeta.meta_value, '%d/%m/%Y') ASC "; 

Но я хотел бы перенести это поведение на WP_Query , используя фильтр posts_where . Я дошел до этого:

 $args = array( 'post_type' => 'post', 'post_status' => 'publish', 'posts_per_page' => 10, 'meta_key' => 'my_custom_date' ); function filter_orderby( $orderby = '' ) { global $wpdb; $orderby .= " ORDER BY STR_TO_DATE($wpdb->postmeta.meta_value, '%d/%m/%Y') ASC "; return $orderby; } add_filter( 'posts_orderby', 'filter_orderby' ); 

Но он ничего не возвращает. что мне не хватает?

Solutions Collecting From Web of "Как отфильтровать дату dd / mm / yyyy из настраиваемого поля в запросе"

Фильтр на posts_orderby должен возвращать строку, которая не начинается с ORDER BY , WordPress добавит ее сам .

По умолчанию WordPress будет фильтровать по post_date . Если вы этого не хотите, вы должны перезаписать предложение заказа, а не добавлять его. Поэтому ваш фильтр должен выглядеть так:

 function filter_orderby( $orderby ) { global $wpdb; return " STR_TO_DATE({$wpdb->postmeta}.meta_value, '%d/%m/%Y') ASC "; }