Вопрос или проблема
Лучший способ показать, что я хочу, — это картинка:
Я хотел бы добавить кнопку на красную область, чтобы создать специальное действие, связанное с 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-запросы.
Пример
-
Добавление заголовка для нового столбца
function custom_chambres_columns($columns) { $columns['custom_action'] = 'Действие'; return $columns; } add_filter('manage_chambres_posts_columns', 'custom_chambres_columns');
Здесь мы добавляем новый столбец с заголовком "Действие" в экран администрирования для пользовательского типа записей
chambres
. -
Заполнение столбца контентом
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
помогает идентифицировать запись, с которой будет выполнено действие. -
Обработка 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. Функция должна принимать идентификатор записи и выполнять нужные операции.
-
Подключение скрипта
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.