Как добавить пользовательскую кнопку в каждое поле экрана администратора Custom Post Types

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

Лучший способ показать, что я хочу, — это картинка:

здесь

Я хотел бы добавить кнопку на красную область, чтобы создать специальное действие, связанное с Chambre1.

Я искал что-то подобное фильтру “manage_posts_columns“, который мы используем для создания новых колонок на Admin Screen для пользовательских типов записей, но ничего не нашел.

Кто-нибудь знает решение этой проблемы?

Большое спасибо

Существуют похожие фильтры и действия для пользовательского типа записей (замените $post_type на название вашего типа записей):

Для добавления новых колонок используйте фильтр: manage_{$post_type}_posts_columns. Этот фильтр принимает один аргумент, список всех колонок. Вам нужно добавить свою колонку и вернуть результаты.

Чтобы отобразить содержимое колонки, используйте действие manage_{$post_type}_posts_custom_column. Это действие передает название колонки и ID записи. Вам нужно вывести данные, которые вы хотите отобразить, но убедитесь, что вы проверили, является ли колонка вашей, проверив название колонки.

add_action('manage_{$post_type}_posts_custom_column', 'my_custom_column', 10, 2);
function my_custom_column($column, $post_id) {
  if ($column == {$my_column_name}) {
    echo '<button>My Button</button>'
  }
}

Замените {$post_type} на фактическое название вашего типа записей, а {$my_column_name} — на имя колонки, которую вы добавили через фильтр manage_{$post_type}_posts_columns.

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

Используйте фильтр manage_${post_type}_posts_columns, чтобы добавить заголовок пользовательской колонки. А также действие manage_${post_type}_posts_custom_column, чтобы заполнить пользовательскую колонку содержимым. Пожалуйста, измените ваш слаг типа записей на chambres и замените приведенную ниже функцию.

// 1. Добавление пользовательского заголовка колонки
function custom_chambres_columns($columns) {
    $columns['custom_action'] = 'Действие';
    return $columns;
}
add_filter('manage_chambres_posts_columns', 'custom_chambres_columns');

// 2. Заполнение пользовательской колонки
function custom_chambres_column_data($column, $post_id) {
    if ($column == 'custom_action') {
        // Вывод кнопки для пользовательского действия
        echo '<button class="custom-action-button" data-post-id="' . $post_id . '">Выполнить действие</button>';
    }
}
add_action('manage_chambres_posts_custom_column', 'custom_chambres_column_data', 10, 2);

// 3. Обработка AJAX-вызова
add_action('wp_ajax_custom_action_handler', 'custom_action_handler');
function custom_action_handler() {
    $post_id = $_POST['post_id'];

    // Выполните ваше пользовательское действие здесь

    // Возвращение ответа (опционально)
    wp_send_json_success('Действие выполнено успешно');
}

// 4. Добавление JavaScript
function enqueue_custom_admin_scripts() {
    global $pagenow, $post_type;

    if ($pagenow == 'edit.php' && $post_type == 'custom_post_type') {
        wp_enqueue_script('custom-admin-scripts', get_template_directory_uri() . '/js/admin-scripts.js', array('jquery'), '1.0', true);

        // Передача URL Ajax в JavaScript
        wp_localize_script('custom-admin-scripts', 'custom_ajax_object', array('ajax_url' => admin_url('admin-ajax.php')));
    }
}
add_action('admin_enqueue_scripts', 'enqueue_custom_admin_scripts');

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

Теория

Добавление пользовательской кнопки на экране администрирования для типов записей в WordPress — задача, требующая знания фильтров и экшенов, предоставленных системой. Для добавления нового столбца на страницу списка записей нужно использовать фильтр manage_{$post_type}_posts_columns. Для вывода содержимого этого столбца применяется экшен manage_{$post_type}_posts_custom_column. Это позволяет не только добавлять новые столбцы с кнопками, но и описывать логику их работы, например, через AJAX-запросы.

Пример

  1. Добавление заголовка для нового столбца

    function custom_chambres_columns($columns) {
        $columns['custom_action'] = 'Действие';
        return $columns;
    }
    add_filter('manage_chambres_posts_columns', 'custom_chambres_columns');

    Здесь мы добавляем новый столбец с заголовком "Действие" в экран администрирования для пользовательского типа записей chambres.

  2. Заполнение столбца контентом

    function custom_chambres_column_data($column, $post_id) {
        if ($column == 'custom_action') {
            echo '<button class="custom-action-button" data-post-id="' . $post_id . '">Выполнить действие</button>';
        }
    }
    add_action('manage_chambres_posts_custom_column', 'custom_chambres_column_data', 10, 2);

    На данном шаге происходит добавление кнопки в пользовательский столбец. Атрибут data-post-id помогает идентифицировать запись, с которой будет выполнено действие.

  3. Обработка AJAX-запроса

    add_action('wp_ajax_custom_action_handler', 'custom_action_handler');
    function custom_action_handler() {
        $post_id = intval($_POST['post_id']);
    
        // Выполнение пользовательской логики
    
        wp_send_json_success('Действие выполнено успешно');
    }

    Здесь описывается логика, выполняемая при нажатии кнопки, связанная через AJAX. Функция должна принимать идентификатор записи и выполнять нужные операции.

  4. Подключение скрипта

    function enqueue_custom_admin_scripts() {
        global $pagenow, $post_type;
    
        if ($pagenow == 'edit.php' && $post_type == 'chambres') {
            wp_enqueue_script('custom-admin-scripts', get_template_directory_uri() . '/js/admin-scripts.js', array('jquery'), '1.0', true);
    
            wp_localize_script('custom-admin-scripts', 'custom_ajax_object', array('ajax_url' => admin_url('admin-ajax.php')));
        }
    }
    add_action('admin_enqueue_scripts', 'enqueue_custom_admin_scripts');

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

Применение

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

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

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