Как изменить порядок публикаций в админке?

Вопрос или проблема

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

Если вы не хотите каждый раз кликать по колонке “Заголовок”, чтобы отсортировать ваши посты по заголовку, вы можете разместить этот код в файле 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)){
        /* Колонка поста: например, заголовок */
        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');

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

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

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 : ‘—’);
}}

?>

.

Ответ или решение

Чтобы изменить порядок отображения записей в административной панели WordPress, чтобы они сортировались по алфавиту, а не по дате, необходимо выполнить несколько шагов. Данная задача решается с помощью внесения изменений в файл функций вашей темы или с помощью создания плагина. Ниже приводится подробное руководство.

Шаг 1: Внесение изменений в файл functions.php

  1. Откройте файл вашей активной темы:
    Вы можете сделать это через панель управления WordPress, перейдя в меню «Внешний вид» -> «Редактор темы», или с помощью FTP-клиента.

  2. Добавьте следующий код:
    Используйте код ниже, чтобы установить порядок сортировки записей по заголовку в алфавитном порядке:

    function custom_post_order($query) {
       // Определяем типы записей.
       $post_types = get_post_types(array('_builtin' => true), 'names');
       $post_type = $query->get('post_type');
    
       // Проверяем тип записи.
       if (in_array($post_type, $post_types)) {
           // Устанавливаем порядок сортировки по умолчанию.
           if ($query->get('orderby') == '') {
               $query->set('orderby', 'title');
           }
           // Устанавливаем порядок ASC (по возрастанию).
           if ($query->get('order') == '') {
               $query->set('order', 'ASC');
           }
       }
    }
    
    if (is_admin()) {
       add_action('pre_get_posts', 'custom_post_order');
    }

    Этот код проверяет, является ли текущий запрос частью административной панели и какого типа записи он касается. Если это стандартные типы записей, он устанавливает порядок сортировки по заголовку в алфавитном порядке.

Шаг 2: Сортировка для всех типов записей

Если вы хотите применить эту сортировку ко всем типам записей (включая пользовательские), измените строку:

$post_types = get_post_types(array('_builtin' => true), 'names');

на

$post_types = get_post_types('', 'names');

Шаг 3: Использование пользовательского поля для приоритета

Если необходимо управлять порядком отображения записей с помощью пользовательского поля (например, для назначения приоритета каждой записи), вы можете добавить код, который создаёт метаполе и сортирует записи по этому полю.

  1. Добавьте метабокс для установки приоритета:

    add_action('add_meta_boxes', 'custom_field');
    function custom_field() {
       add_meta_box('post_priority', 'Порядок приоритета', 'priority_meta_box', 'post', 'normal', 'low');
    }
    
    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 esc_attr($priority); ?>" min="1">
       <?php
    }
  2. Сохраните значение приоритета:

    add_action('save_post', 'handle_priority_submit');
    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', intval($priority));
           }
       }
    }
  3. Сортировка записей по приоритету:

    add_action('pre_get_posts', 'sort_posts_by_priority_in_admin');
    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');    
       }
    }
  4. Добавление столбца для отображения приоритета:

    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 : '—');
       }
    }

Заключение

Смешивание сортировки по заголовку и сортировки на основе пользовательских полей предоставляет мощный инструмент для управления порядком отображения записей в административной панели WordPress. Убедитесь, что вы создаёте резервные копии ваших файлов перед внесением изменений, чтобы избежать потери данных. Следуя этому руководство, вы не только упростите организацию записей, но и улучшите опыт их управления в WordPress.

Оцените материал
Добавить комментарий

Капча загружается...