Intereting Posts
Неустранимая ошибка: вызов неопределенной функции plugin_dir_path () Как передать логическое значение в wp_localize_script Как установить «admin_email»? Оптимальный подход для замены 8 изображений заголовков в дочерней теме? Как сделать кнопку сообщения случайным образом Как мне удалить или изменить нижний колонтитул в моей дочерней теме? Проблема разбиения на страницы с помощью WP_Query WordPress Найти повторяющиеся сообщения по контенту Настройка личного содержимого для конкретных пользователей с ежедневными обновлениями Создание плагина, на котором будет отображаться текст на каждой странице Иерархические пользовательские типы сообщений. Показывать только родителя в налоговом архиве? Сервер подчеркнул / фид Неустранимая ошибка: вызов неопределенной функции is_multisite () Как включить администратора сайта для редактирования пользователей в сетевой / мультисайтовой настройке WordPress? Отобразить количество фактически загруженных изображений

Как сортировать сообщения в admin по заголовкам с форматом dd.mm.yyyy?

Я создал Custom Post Type для бронирования, новые сообщения вставляются посетителями, а заголовок отформатирован как дата, на которую происходит бронирование. Итак, список сообщений в админах выглядит следующим образом:

введите описание изображения здесь

Есть ли способ, которым я мог бы заказать эти сообщения в списке администраторов этими названиями? В общем случае решение было бы, я думаю, получить заголовки, преобразовать их в даты и затем отсортировать эти сообщения. Если да, то как я могу сделать это внутри фильтра pre_get_posts ()?

Возможно, я мог бы сделать это лучше, но все остальное об этих функциях отлично работает. Каждое сообщение содержит ACF-повторитель со временем по шагам, поэтому внутри он немного сложнее.

РЕДАКТИРОВАТЬ:

Вот как у меня фильтр, он правильно изменяет posts_per_page чтобы убедиться, что он работает. Я попытался воссоздать его как класс плагина.

 public function __construct(){ add_action( 'pre_get_posts', array($this, 'sort_admin_daily_reservations')); add_filter( 'posts_orderby', array($this, 'test_sorting_filter' ), 10, 2); } public function sort_admin_daily_reservations($query) { if(is_admin() && $query->is_main_query() && in_array ($query->get('post_type'), array('Booking')) ) { $query->set('orderby', 'wpse_mod_title'); $query->set('order', 'DESC'); //$query->set('posts_per_page', 2); } return $query; } public function test_sorting_filter($orderby, \WP_Query $q) { global $wpdb; $_orderby = $q->get( 'orderby' ); $_order = $q->get( 'order' ); if('wpse_mod_title ' === $_orderby && in_array( $_order , [ 'ASC', 'DESC' ], true )) $orderby = " CONCAT( SUBSTRING( {$wpdb->posts}.post_title, 7, 4 ), SUBSTRING( {$wpdb->posts}.post_title, 4, 2 ), SUBSTRING( {$wpdb->posts}.post_title, 1, 2 ) ) {$_order} "; return $orderby; } 

Похоже, что названия публикаций имеют формат даты DD.MM.YYYY.

Мы можем заказать названия DD.MM.YYYY как YYYYMMDD с:

 $query = new WP_Query( [ 'orderby' => 'wpse_mod_title ' ] ); 

это поддерживается этим плагином:

 /** * Plugin Name: WPSE-274981: Sort DD.MM.YYYY Post Titles as YYYYMMDD In WP_Query * Desription: Supported by the wpse_mod_title orderby value */ add_filter( 'posts_orderby', function( $orderby, \WP_Query $q ) use ( &$wpdb ) { $_orderby = $q->get( 'orderby' ); $_order = $q->get( 'order' ); if( 'wpse_mod_title' === $_orderby && in_array( $_order , [ 'ASC', 'DESC' ], true ) ) $orderby = " CONCAT( SUBSTRING( {$wpdb->posts}.post_title, 7, 4 ), // Get the YYYY part SUBSTRING( {$wpdb->posts}.post_title, 4, 2 ), // Get the MM part SUBSTRING( {$wpdb->posts}.post_title, 1, 2 ) // Get the DD part ) {$_order} "; return $orderby; }, 10, 2 ); 

Обратите внимание, что это предполагает строгий DD.MM.YYYY названия в формате DD.MM.YYYY без пробелов.

Мы могли бы рассмотреть возможность его обрезки в SQL, чтобы сделать его более гибким.

Я думаю, что я под влиянием @bonger или @thedeadmedic написал такой порядок подстроки. 😉

Но сначала рассмотрите другие подходы, как, например, написание названий по-разному.