Как изменить порядок записей в админ-панели?

27 сент. 2012 г., 18:27:25
Просмотры: 23.9K
Голосов: 11

Как я могу изменить порядок записей в панели администратора, чтобы они отображались в алфавитном порядке по заголовку, а не по дате публикации?

0
Все ответы на вопрос 3
4
18

Если вы не хотите каждый раз нажимать на колонку "Заголовок" для сортировки записей по названию, вы можете добавить этот код в файл functions.php вашей текущей активной темы WordPress или в плагин. Это позволит автоматически сортировать записи, избавляя вас от необходимости каждый раз кликать на заголовок колонки.

Этот код можно использовать для установки порядка сортировки по умолчанию для типов записей.

/* Сортировка записей в wp_list_table по колонке в порядке возрастания или убывания. */
function custom_post_order($query){
    /* 
        Установка типов записей.
        _builtin => true возвращает стандартные типы записей WordPress.
        _builtin => false возвращает пользовательские зарегистрированные типы записей.
    */
    $post_types = get_post_types(array('_builtin' => true), 'names');
    /* Текущий тип записи. */
    $post_type = $query->get('post_type');
    /* Проверка типов записей. */
    if(in_array($post_type, $post_types)){
        /* Колонка записи: например, title */
        if($query->get('orderby') == ''){
            $query->set('orderby', 'title');
        }
        /* Порядок сортировки: ASC / DESC */
        if($query->get('order') == ''){
            $query->set('order', 'ASC');
        }
    }
}
if(is_admin()){
    add_action('pre_get_posts', 'custom_post_order');
}

Вы можете использовать некоторые из этих примеров условий...

/* Влияет на все типы записей в массиве. */
if(in_array($post_type, $post_types)){

}

/* Влияет только на определенный тип записи в массиве типов записей. */
if(in_array($post_type, $post_types) && $post_type == 'your_post_type_name'){

}

/* Влияет на все типы записей в массиве, кроме указанного. */
if(in_array($post_type, $post_types) && $post_type != 'your_post_type_name'){

}

Если вы хотите применить эту сортировку ко ВСЕМ типам записей, независимо от того, являются ли они "встроенными"...

Замените это: $post_types = get_post_types(array('_builtin' => true), 'names');

На это: $post_types = get_post_types('', 'names');

27 сент. 2012 г. 21:20:31
Комментарии

Можно ли использовать это внутри функции вместо проверки перед действием if ( ! is_admin ) { return; }

urok93 urok93
1 окт. 2012 г. 00:07:01

Думаю, можно так сделать.

Michael Ecklund Michael Ecklund
1 окт. 2012 г. 18:13:52

Обязательно добавьте "return $query;" перед завершением функции, иначе это не будет работать в более поздних версиях WordPress.

Jobst Jobst
20 апр. 2017 г. 05:38:08

Я думаю, что какой-то плагин выполняет эту функцию и переопределяет мою пользовательскую функцию. Есть ли хук, чтобы гарантировать, что мой код будет выполнен вместо кода плагинов?

Thomas_Hoadley Thomas_Hoadley
20 авг. 2018 г. 14:23:24
0

Ах, нажмите на эту маленькую штучку с заголовком, чтобы переключить алфавитную сортировку...

Изображение для наглядного примера

27 сент. 2012 г. 20:05:36
0
function custom_field() {
    add_meta_box(
        'post_priority', 
        'Приоритет записи', 
        'priority_meta_box', 
        'post', 
        'normal', 
        'low' 
    );
}
add_action('add_meta_boxes', 'custom_field'); 

function priority_meta_box($post) {
    
    $priority = get_post_meta($post->ID, 'post_priority', true);
  
    ?>
    <label for="post_priority">Приоритет записи:</label>
    <input type="number" id="post_priority" name="post_priority" value="<?php echo $priority; ?>" min="1">
    <?php
    
    
}

// Сохранение значения пользовательского поля
function handle_priority_submit($post_id) {
    
    if (array_key_exists('post_priority', $_POST)) {
        $priority = $_POST['post_priority'];
        if ($priority >=1){
            update_post_meta($post_id,'post_priority',$priority);
        }
 }
 }
 add_action('save_post','handle_priority_submit');


 function sort_posts_by_priority_in_admin($query) {
    
    if ($query->get('post_type') === 'post') {

        $query->set('meta_key', 'post_priority');
        $query->set('orderby', 'meta_value_num');
        $query->set('order', 'ASC');    
    }
}
add_action('pre_get_posts', 'sort_posts_by_priority_in_admin');


// Для добавления колонки в админке (добавление колонки в админке записей stack exchange)
 
add_filter('manage_posts_columns', 'add_priority_column');
function add_priority_column($columns) {
    $columns['post_priority'] = 'Приоритет'; 
    return $columns; 
}


add_action('manage_posts_custom_column', 'priority_column_value', 10, 2);
function priority_column_value($column, $post_id) {
    if ($column == 'post_priority') {
        $priority = get_post_meta($post_id, 'post_priority', true); 
        echo esc_html($priority ? $priority : '—'); 
}}
6 дек. 2024 г. 19:01:03