Java, UX, HTML, CSS, WEB-design

Как изменить списки сообщений администратора в WordPress

Краткое описание по статье Как изменить списки сообщений администратора в WordPress

Название: Как изменить списки сообщений администратора в WordPress . Краткое описание: [ad_1] ⭐ Даниэль . Дата публикации: 11.02.2022 . Автор: Алишер Валеев .

Для чего создан сайт Novosti-Nedeli.ru

Данный сайт посвящен новостям мира и мира технологий . Также тут вы найдете руководства по различным девайсам.

Сколько лет сайту?

Возраст составляет 3 года

[ad_1]

  • Даниэль Патаки

  • 0 Комментарии

Как изменить списки сообщений администратора в WordPress

  • 11 минут чтения

  • WordPress, инструменты, администратор, методы (WP)

Краткое резюме ↬

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

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

Чтобы убедиться, что мы находимся на одной странице, список администратора — это таблица сообщений, отображаемая в разделе администратора, когда вы нажимаете «Сообщения», «Страницы» или другой настраиваемый тип сообщений. Прежде чем углубиться, стоит отметить, что административные таблицы создаются с помощью WP_List_Table класс. Джереми Десво де Мариньи (Jeremy Desvaux de Marigny) написал отличную статью о нативных административных таблицах, в которой объясняется, как сделать их с нуля.

Дальнейшее чтение на SmashingMag:

  • Полное руководство по пользовательским типам записей
  • Как правильно создавать собственные таблицы администрирования в WordPress
  • Шорткоды WordPress: полное руководство

В этой статье мы сосредоточимся на том, как расширить существующие таблицы. Мы сделаем это на примере недавно созданной темы под названием Rock Band. Rock Band включает в себя управление событиями, а это означает, что нам нужны были некоторые настраиваемые элементы интерфейса и детали для конкретных событий, чтобы сделать раздел администратора более полезным!

Еще после прыжка! Продолжить чтение ниже ↓

Создание пользовательского типа записи

Этот процесс довольно прост и хорошо описан в «Полном руководстве по пользовательским типам записей». Все, что нам нужно, это определение меток, которые мы собираемся использовать, и несколько настроек. Откройте свой functions.php файл и поместите в него следующее.

add_action( 'init', 'bs_post_types' );
function bs_post_types() {

  $labels = array(
    'name'                => __( 'Events', THEMENAME ),
    'singular_name'       => __( 'Event', THEMENAME ),
    'add_new'             => __( 'Add New', THEMENAME ),
    'add_new_item'        => __( 'Add New Event', THEMENAME ),
    'edit_item'           => __( 'Edit Event', THEMENAME ),
    'new_item'            => __( 'New Event', THEMENAME ),
    'all_items'           => __( 'All Event', THEMENAME ),
    'view_item'           => __( 'View Event', THEMENAME ),
    'search_items'        => __( 'Search Events', THEMENAME ),
    'not_found'           => __( 'No events found', THEMENAME ),
    'not_found_in_trash'  => __( 'No events found in Trash', THEMENAME ),
    'menu_name'           => __( 'Events', THEMENAME ),
  );

  $supports = array( 'title', 'editor' );

  $slug = get_theme_mod( 'event_permalink' );
  $slug = ( empty( $slug ) ) ? 'event' : $slug;

  $args = array(
    'labels'              => $labels,
    'public'              => true,
    'publicly_queryable'  => true,
    'show_ui'             => true,
    'show_in_menu'        => true,
    'query_var'           => true,
    'rewrite'             => array( 'slug' => $slug ),
    'capability_type'     => 'post',
    'has_archive'         => true,
    'hierarchical'        => false,
    'menu_position'       => null,
    'supports'            => $supports,
  );

  register_post_type( 'event', $args );

}

Быстрая подсказка

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

события_оригинал

То, что мы получаем, является списком сообщений выше. Это лучше, чем ничего, но в нем нет никакой информации на первый взгляд. Место проведения, время начала и статус билетов были бы отличным дополнением, так что давайте приступим!

Добавление пользовательских заголовков таблицы

На протяжении всего этого процесса нам никогда не придется касаться WP_Lists_Table класс напрямую. Это замечательная новость! Поскольку мы будем делать все с помощью хуков, наш код будет красивым и модульным, легко настраиваемым.

Добавить заголовок так же просто, как изменить значение массива. Это звучит как работа для фильтра!

add_filter('manage_event_posts_columns', 'bs_event_table_head');
function bs_event_table_head( $defaults ) {
    $defaults['event_date']  = 'Event Date';
    $defaults['ticket_status']    = 'Ticket Status';
    $defaults['venue']   = 'Venue';
    $defaults['author'] = 'Added By';
    return $defaults;
}

Обратите внимание на название фильтра: оно соответствует названию типа поста, который мы создали. Это означает, что вы можете изменить таблицу любого типа записи, а не только свои собственные. Просто используйте manage_post_posts_columns изменить столбцы для таблицы обычных сообщений.

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

Наполняй!

Добавление данных для каждого столбца примерно так же «сложно», как и создание столбцов.

add_action( 'manage_event_posts_custom_column', 'bs_event_table_content', 10, 2 );

function bs_event_table_content( $column_name, $post_id ) {
    if ($column_name == 'event_date') {
    $event_date = get_post_meta( $post_id, '_bs_meta_event_date', true );
      echo  date( _x( 'F d, Y', 'Event date format', 'textdomain' ), strtotime( $event_date ) );
    }
    if ($column_name == 'ticket_status') {
    $status = get_post_meta( $post_id, '_bs_meta_event_ticket_status', true );
    echo $status;
    }

    if ($column_name == 'venue') {
    echo get_post_meta( $post_id, '_bs_meta_event_venue', true );
    }

}

Как видно из структуры этой функции, она вызывается отдельно для каждого столбца. Из-за этого нам нужно проверить, какой столбец отображается в данный момент, а затем выдать соответствующие данные.

Необходимые для этого данные хранятся в postmeta Таблица. Вот как это сделать:

  • Дата события сохраняется с помощью _bs_meta_event_date ключ.
  • Статус заявки использует _bs_meta_event_ticket_status ключ.
  • Место проведения хранится с помощью _bs_meta_event_venue мета ключ.

Потому что это все postmeta значения, нам просто нужно использовать get_post_meta() функцию их извлечения. За исключением даты, мы можем сразу вывести эти значения.

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

события_данные

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

Упорядочивание столбцов

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

add_filter( 'manage_edit-event_sortable_columns', 'bs_event_table_sorting' );
function bs_event_table_sorting( $columns ) {
  $columns['event_date'] = 'event_date';
  $columns['ticket_status'] = 'ticket_status';
  $columns['venue'] = 'venue';
  return $columns;
}

add_filter( 'request', 'bs_event_date_column_orderby' );
function bs_event_date_column_orderby( $vars ) {
    if ( isset( $vars['orderby'] ) && 'event_date' == $vars['orderby'] ) {
        $vars = array_merge( $vars, array(
            'meta_key' => '_bs_meta_event_date',
            'orderby' => 'meta_value'
        ) );
    }

    return $vars;
}

add_filter( 'request', 'bs_ticket_status_column_orderby' );
function bs_ticket_status_column_orderby( $vars ) {
    if ( isset( $vars['orderby'] ) && 'ticket_status' == $vars['orderby'] ) {
        $vars = array_merge( $vars, array(
            'meta_key' => '_bs_meta_event_ticket_status',
            'orderby' => 'meta_value'
        ) );
    }

    return $vars;
}

add_filter( 'request', 'bs_venue_column_orderby' );
function bs_venue_column_orderby( $vars ) {
    if ( isset( $vars['orderby'] ) && 'venue' == $vars['orderby'] ) {
        $vars = array_merge( $vars, array(
            'meta_key' => '_bs_meta_event_venue',
            'orderby' => 'meta_value'
        ) );
    }

    return $vars;
}

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

Когда мы говорим «заказать по месту», WordPress не понимает, что это значит. Результаты упорядочиваются до их отображения, а не постфактум. Следовательно, WordPress должен знать, в каком порядке извлекать сообщения, прежде чем он их на самом деле извлечет. Таким образом, мы сообщаем WordPress, какой meta_key фильтровать и как обрабатывать значения (meta_value для струн, meta_value_num для целых чисел).

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

Добавив приведенный выше код, мы теперь можем сделать заказ, основываясь на дате, статусе и месте проведения. Мы почти там. Еще одна вещь очень помогла бы, особенно при работе с сотнями событий.

Фильтрация данных

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

add_action( 'restrict_manage_posts', 'bs_event_table_filtering' );
function bs_event_table_filtering() {
  global $wpdb;
  if ( $screen->post_type == 'event' ) {

    $dates = $wpdb->get_results( "SELECT EXTRACT(YEAR FROM meta_value) as year,  EXTRACT( MONTH FROM meta_value ) as month FROM $wpdb->postmeta WHERE meta_key = '_bs_meta_event_date' AND post_id IN ( SELECT ID FROM $wpdb->posts WHERE post_type="event" AND post_status != 'trash' ) GROUP BY year, month " ) ;

    echo ’;
      echo ’ . __( 'Show all event dates', 'textdomain' ) . ’;
    foreach( $dates as $date ) {
      $month = ( strlen( $date->month ) == 1 ) ? 0 . $date->month : $date->month;
      $value = $date->year . '-' . $month . '-' . '01 00:00:00';
      $name = date( 'F Y', strtotime( $value ) );

      $selected = ( !empty( $_GET['event_date'] ) AND $_GET['event_date'] == $value ) ? 'selected="select"' : ’;
      echo ’ . $name . ’;
    }
    echo ’;

    $ticket_statuses = get_ticket_statuses();
    echo ’;
      echo ’ . __( 'Show all ticket statuses', 'textdomain' ) . ’;
    foreach( $ticket_statuses as $value => $name ) {
      $selected = ( !empty( $_GET['ticket_status'] ) AND $_GET['ticket_status'] == $value ) ? 'selected="selected"' : ’;
      echo ’ . $name . ’;
    }
    echo ’;

  }
}

Я знаю, это немного страшнее! Изначально все, что мы делаем, — это добавляем фильтры на нужную страницу. Как видно из хука, это не зависит от типа записи, поэтому нам нужно проверить вручную.

Как только мы уверены, что находимся на странице событий, мы добавляем два элемента управления: селектор дат событий и селектор статусов билетов.

У нас есть одна пользовательская функция, get_ticket_statuses(), который используется для получения списка статусов заявок. Все они определяются пользователем, поэтому описание того, как это работает, было бы излишним. Достаточно сказать, что он содержит массив с парами ключ-значение, которые нам нужны для селектора.

events_final

Как только это будет сделано, таблица примет свою окончательную форму. Теперь у нас есть фильтры вверху, но они еще не работают. Давай исправим это, а?

Фильтрация данных — это просто повторное добавление аргументов в запрос. На этот раз вместо того, чтобы упорядочивать наши данные, мы добавим параметры, чтобы сузить или расширить возвращаемый список сообщений.

add_filter( 'parse_query','bs_event_table_filter' );
function bs_event_table_filter( $query ) {
  if( is_admin() AND $query->query['post_type'] == 'event' ) {
    $qv = &$query->query_vars;
    $qv['meta_query'] = array();

    if( !empty( $_GET['event_date'] ) ) {
      $start_time = strtotime( $_GET['event_date'] );
      $end_time = mktime( 0, 0, 0, date( 'n', $start_time ) + 1, date( 'j', $start_time ), date( 'Y', $start_time ) );
      $end_date = date( 'Y-m-d H:i:s', $end_time );
      $qv['meta_query'][] = array(
        'field' => '_bs_meta_event_date',
        'value' => array( $_GET['event_date'], $end_date ),
        'compare' => 'BETWEEN',
        'type' => 'DATETIME'
      );

    }

    if( !empty( $_GET['ticket_status'] ) ) {
      $qv['meta_query'][] = array(
        'field' => '_bs_meta_event_ticket_status',
        'value' => $_GET['ticket_status'],
        'compare' => '=',
        'type' => 'CHAR'
      );
    }

    if( !empty( $_GET['orderby'] ) AND $_GET['orderby'] == 'event_date' ) {
      $qv['orderby'] = 'meta_value';
      $qv['meta_key'] = '_bs_meta_event_date';
      $qv['order'] = strtoupper( $_GET['order'] );
    }

  }
}

Для каждого фильтра нам нужно добавить правила в запрос. Когда мы фильтруем события, нам нужно добавить файл meta_query. Это вернет только результаты, для которых ключ настраиваемого поля _bs_meta_event_ticket_status и значением является статус данного билета.

Как только эта последняя часть головоломки будет добавлена, у нас будет настраиваемый список администраторов WordPress с фильтрацией, упорядочением и пользовательскими данными. Отличная работа!

Обзор

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

Отображение нужной информации в нужном месте может сделать огромный разница в продаваемости и привлекательности любого продукта. При этом не злоупотребляйте своей новообретенной силой. Не добавляйте поля только потому, что можете, особенно в основные таблицы WordPress.

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

Если вы использовали эти методы в одном из своих продуктов или вам интересно, как отобразить лакомые кусочки информации в таблице, сообщите нам об этом в комментариях!

Сокрушительная редакция
(ал, ил)



[ad_2]
Source: https://smashingmagazine.com

Заключение

Вы ознакомились с статьей — Как изменить списки сообщений администратора в WordPress

Пожалуйста оцените статью, и напишите комментарий.

Похожие статьи

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

Ваш адрес email не будет опубликован.

Кнопка «Наверх»