Как из админки запустить php-скрипт по клику?

Ссылка скопирована
1 ответ

Добрый день!

Подскажите, как можно в админке, например в кастомном типе записи, организовать запрос к api?

Моя идея такая: жать в пользовательском посте кнопку, которая запускает мой php обработчик, который в свою очередь создаёт и обновляет существующие записи.

Я по api получаю json объект и хочу его данными заполнять посты и таксономии.

По факту, мне просто нужно что-то, что запустит мой php скрипт, по клику пользователя.

Дополнительно:

Проблема молотка.

Тебе не надо искать "как сделать кнопку". Тебе надо на базе своего скрипта написать плагин, который будет и получать данные и постить их в ВП.

Как из админки запустить 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-скрипт по клику?

Как из админки запустить php-скрипт по клику?

Как из админки запустить php-скрипт по клику?

Как из админки запустить php-скрипт по клику?

  • Спасибо, идею понял ) Код пока не могу потестить, но верю, что всё работает )))
  • Прикольна!
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Backend-редакция Ответ

Запустить 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('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;
});

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.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно