Как отсортировать записи пользовательского типа по дате (по убыванию) в панели администратора?
Я создал новый тип записи с названием "Video".
Когда я создаю записи для этого типа, они сортируются по title ASC
.
Возможно ли отсортировать записи по дате в порядке убывания?
register_post_type('Videos', array(
'labels' => array(
'name' => _x('Видео', 'общее название типа записи'),
'singular_name' => _x('Видео', 'единственное число названия типа записи'),
'add_new' => _x('Добавить', 'Видео'),
'add_new_item' => __('Добавить новое видео'),
'edit_item' => __('Редактировать видео'),
'new_item' => __('Новое видео'),
'view_item' => __('Посмотреть ссылку на видео'),
//'search_items' => __('Видео'),
'menu_name' => 'Видео'
),
'public' => true,
'show_ui' => true,
'capability_type' => 'post',
'hierarchical' => true,
'rewrite' => array('slug' => 'video'),
'query_var' => true,
'supports' => array(
'title',
'editor' => false,
'excerpt' => false,
'trackbacks' => false,
'custom-fields',
'comments' => false,
'revisions' => false,
'thumbnail' => false,
'author' => false,
'page-attributes' => false,
),
'taxonomies' => array('post_tag')
)
);

Хорошо, вы можете просто подключиться к фильтру pre_get_posts и проверить is_admin. Поместите это в вашу тему или плагин:
function wpse_81939_post_types_admin_order( $wp_query ) {
if (is_admin()) {
// Получаем тип записи из запроса
$post_type = $wp_query->query['post_type'];
if ( $post_type == 'Videos') {
$wp_query->set('orderby', 'date');
$wp_query->set('order', 'DESC');
}
}
}
add_filter('pre_get_posts', 'wpse_81939_post_types_admin_order');
Я также рекомендую изменить post_type "Videos" на нижний регистр, например "video".

Хорошо, спасибо Понтус! Я попробую это. Но почему это не установлено по умолчанию? Потому что для "Записей" уже установлен "orderby DESC"

В приведённом выше примере отключается возможность сортировки при нажатии на заголовки столбцов.
Сортировка для нескольких пользовательских типов записей:
function wpse_819391_post_types_admin_order( $wp_query ) {
if ( is_admin() && !isset( $_GET['orderby'] ) ) {
// Получаем тип записи из запроса
$post_type = $wp_query->query['post_type'];
if ( in_array( $post_type, array('videos','news','text') ) ) {
$wp_query->set('orderby', 'date');
$wp_query->set('order', 'DESC');
}
}
}
add_filter('pre_get_posts', 'wpse_819391_post_types_admin_order');

Я использовал немного другой подход:
add_action('pre_get_posts', 'filter_posts_list');
function filter_posts_list($query) {
//$pagenow содержит имя текущей просматриваемой страницы
global $pagenow, $typenow;
if(current_user_can('edit_posts') && ('edit.php' == $pagenow)) {
//метод set() глобального $query для установки параметров
$query->set('orderby', 'date');
$query->set('order', 'desc');
}
}

Измените аргумент hierarchical
на false
или удалите эту строку, чтобы использовать значение по умолчанию false
.
'hierarchical' => false,
https://developer.wordpress.org/reference/functions/register_post_type/#parameters
