Как из админки запустить php-скрипт по клику?
Добрый день!
Подскажите, как можно в админке, например в кастомном типе записи, организовать запрос к api?
Моя идея такая: жать в пользовательском посте кнопку, которая запускает мой php обработчик, который в свою очередь создаёт и обновляет существующие записи.
Я по api получаю json объект и хочу его данными заполнять посты и таксономии.
По факту, мне просто нужно что-то, что запустит мой php скрипт, по клику пользователя.
Дополнительно:
Проблема молотка.
Тебе не надо искать "как сделать кнопку". Тебе надо на базе своего скрипта написать плагин, который будет и получать данные и постить их в ВП.
Я бы использовал плагин, с личной админкой и кнопкой на панели меню:
/* Plugin Name: Супер плагин Description: Невероятный плагин, взламывает пентагон по клику! Version: 0.1 Author: Михаил Р. */ function super_plugin_menu() { add_menu_page('Супер плагин', 'Супер плагин', 'manage_options', 'custom-php-executor', 'super_plugin'); } function super_plugin() { if(isset($_POST['custom_php_code'])) { $code = stripslashes($_POST['custom_php_code']); update_option('super_plugin_custom_code', $code); } else { $code = get_option('super_plugin_custom_code', ''); } ?> <div class="wrap"> <h2>Супер плагин</h2> <form method="post"> <textarea name="custom_php_code" style="width:100%;height:200px;" ><?php echo htmlspecialchars($code); ?></textarea> <input type="submit" value="Выполнить, как следует!" class="button button-primary"> </form> </div> <?php if(!empty($code)) { eval($code); } } add_action('admin_menu', 'super_plugin_menu'); |
/* Plugin Name: Супер плагин Description: Невероятный плагин, взламывает пентагон по клику! Version: 0.1 Author: Михаил Р. */ function super_plugin_menu() { add_menu_page('Супер плагин', 'Супер плагин', 'manage_options', 'custom-php-executor', 'super_plugin'); } function super_plugin() { if(isset($_POST['custom_php_code'])) { $code = stripslashes($_POST['custom_php_code']); update_option('super_plugin_custom_code', $code); } else { $code = get_option('super_plugin_custom_code', ''); } ?> <div class="wrap"> <h2>Супер плагин</h2> <form method="post"> <textarea name="custom_php_code" style="width:100%;height:200px;" ><?php echo htmlspecialchars($code); ?></textarea> <input type="submit" value="Выполнить, как следует!" class="button button-primary"> </form> </div> <?php if(!empty($code)) { eval($code); } } add_action('admin_menu', 'super_plugin_menu');
КартинкО
- Спасибо, идею понял ) Код пока не могу потестить, но верю, что всё работает )))
- Прикольна!
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос





Запустить PHP-скрипт из админки по кнопке можно через AJAX или через admin-post.php. Для задачи “нажал кнопку в кастомной записи, сходил в API, создал/обновил записи” лучше использовать admin-post или AJAX с nonce-проверкой и проверкой прав пользователя.
Простой вариант: добавить кнопку в метабокс CPT, которая отправляет запрос на
admin-post.php.add_action('add_meta_boxes', function () { add_meta_box('api_sync_box', 'API синхронизация', function ($post) { $url = wp_nonce_url( admin_url('admin-post.php?action=my_api_sync&post_id=' . $post->ID), 'my_api_sync_' . $post->ID ); echo '<a class="button button-primary" href="' . esc_url($url) . '">Запустить синхронизацию</a>'; }, 'my_cpt', 'side'); });
Обработчик:
add_action('admin_post_my_api_sync', function () { $post_id = absint($_GET['post_id'] ?? 0); if (!$post_id || !current_user_can('edit_post', $post_id)) { wp_die('Недостаточно прав'); } check_admin_referer('my_api_sync_' . $post_id); // здесь запрос к API, разбор JSON, создание/обновление записей wp_safe_redirect(get_edit_post_link($post_id, 'raw')); exit; });
Если операция долгая, не делайте её полностью в одном клике. Лучше поставить задачу в очередь: сохранить флаг/задание в option или отдельную таблицу, а обработку выполнять WP-Cron/CLI. Иначе можно упереться в timeout PHP.
Для API обязательно логируйте результат: статус ответа, сколько записей создано, сколько обновлено, какие ошибки. Без лога потом невозможно понять, что реально произошло.
Итог: кнопка в админке делается через метабокс +
admin-post.phpили AJAX. Обязательны nonce, проверка прав и логирование. Долгие массовые обновления лучше выносить в очередь или cron.