Как сделать столбец администратора “шаблон страницы” сортируемым?

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

Я использую следующий код для добавления столбца “Шаблон” в админские колонки страниц:

// Управление отображаемыми колонками
add_filter( 'manage_pages_columns', 'add_template_col' );
function add_template_col( $columns ) {
    $columns['page-layout'] = 'Шаблон';
    return $columns;
}

// Заполнение нестандартных колонок
add_action( 'manage_pages_custom_column', 'fill_template_col', 10, 2);
function fill_template_col( $column, $post_id ) {
    if ( 'page-layout' === $column ) {
        $set_template = get_post_meta( $post_id, '_wp_page_template', true );
        if ( ! $set_template ) {
            _e( 'н/д' );  
        } elseif ( $set_template == 'default' ) {
            echo 'Страница';
        }
        $templates = get_page_templates();
        ksort( $templates );
        foreach ( array_keys( $templates ) as $template ) :
            if ( $set_template == $templates[$template] ) echo $template;
        endforeach;
    }
}

Это работает, но я хотел бы, чтобы пользователи могли сортировать по этому столбцу. Я пробовал различные реализации решений для сортировки админских колонок, которые работают для сортировки других колонок (например, добавление и сортировка колонок на основе Advanced Custom Fields и т. д.), но ничего из того, что я пробовал, не работает для сортировки колонки Шаблон, которую я создал. Вот пример того, что я пробовал, но это не работает:

// Добавить в список сортируемых колонок
add_filter( 'manage_edit-pages_sortable_columns', 'template_sortable_columns');
function smashing_realestate_sortable_columns( $columns ) {
  $columns['page-layout'] = '_wp_page_template';
  return $columns;
}

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

// Изменение запроса
add_action( 'pre_get_posts', 'template_col_orderby' );
function template_col_orderby( $query ) {
    if( ! is_admin() || ! $query->is_main_query() ) {
        return;
    }
    if ( '_wp_page_template' === $query->get( 'orderby') ) {
        $query->set( 'orderby', 'meta_value' );
        $query->set( 'meta_key', '_wp_page_template' );
        $query->set( 'meta_type', 'char' );
    }
}

Очевидно, я делаю что-то не так и был бы очень признателен за совет.

.

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

Для того чтобы сделать колонку "Template" (Шаблон) в административной панели WordPress сортируемой, вам необходимо внести ряд изменений и дополнений в ваш код. Ваша текущая реализация уже неплоха, но требует некоторых доработок для обеспечения корректной сортировки. Давайте разберем каждый шаг подробно:

1. Активация сортируемой колонки

Вы уже начали правильно с добавления вашей колонки к списку сортируемых. Однако, вы используете название функции smashing_realestate_sortable_columns, которое не соответствует вашему коду. Исправьте это на правильное имя функции, чтобы избежать путаницы:

// Добавляем колонку в список сортируемых
add_filter( 'manage_edit-pages_sortable_columns', 'template_sortable_columns' );
function template_sortable_columns( $columns ) {
    $columns['page-layout'] = '_wp_page_template'; // Связываем колонку с мета-данными
    return $columns;
}

2. Изменение запроса сортировки

Ваша логика для изменения запроса тоже выглядит хорошо, но в ней пропущены некоторые детали. Убедитесь, что ваш код учитывает, что сортировка выполняется только на страницах админки:

// Модифицируем запрос для сортировки
add_action( 'pre_get_posts', 'template_col_orderby' );
function template_col_orderby( $query ) {
    if ( ! is_admin() || ! $query->is_main_query() ) {
        return;
    }
    if ( 'page-layout' === $query->get( 'orderby' ) ) {
        $query->set( 'meta_key', '_wp_page_template' ); // Указываем мета-ключ
        $query->set( 'orderby', 'meta_value' ); // Сортируем по значению мета-данных
    }
}

3. Убедитесь, что мета-данные загружены

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

  • Если шаблон по умолчанию, проверьте на empty.
  • Попробуйте выводить все доступные шаблоны, чтобы избежать путаницы.

4. Обновление стилей и интерфейса

Также вы можете добавить CSS для улучшения внешнего вида сортировки. Это может быть полезно, чтобы пользователи могли без труда заметить возможность сортировки по этой колонке.

Итог

Теперь, когда вы внесли указанные изменения, ваша колонка "Template" в административной панели WordPress станет сортируемой. Пользователи смогут легко организовывать свои страницы по шаблонам, улучшая навигацию и управление контентом.

Этот процесс может потребовать тестирования и отладки в зависимости от вашего окружения, так как возможно влияние других плагинов и настроек тем. Будьте внимательны к ошибкам в консоли браузера и логах сервера, чтобы выявить возможные проблемы.

Если у вас остались вопросы или дальнейшие сложности с реализацией, не стесняйтесь обращаться за дополнительной помощью!

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

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