Плагин WordPress: функция вызова по нажатию кнопки в панели администратора - PullRequest
24 голосов
/ 22 декабря 2011

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

Вот что у меня такдалеко:

/*
Plugin Name: 
Plugin URI: 
Description: 
Author:
Version: 1.0
Author URI:
*/


add_action('admin_menu', 'wc_plugin_menu');

function wc_plugin_menu(){
 add_management_page('Title', 'MenuTitle', 'manage_options', 'wc-admin-menu', 'wc_plugin_options'); 

}

function wc_plugin_options(){
if (!current_user_can('manage_options'))  {
    wp_die( __('You do not have sufficient permissions to access this page.')    );
}
echo '<div class="wrap">';
echo '<button>Call Function!</button>'; //add some type of hook to call function
echo '</div>';

}

function button_function()
{
//do some stuff
} 


?>

Ответы [ 2 ]

24 голосов
/ 22 декабря 2011

Ну, у вас есть два варианта.

1) Используйте AJAX для создания ловушки admin-ajax, которую вы выполняете с помощью JavaScript, когда пользователь нажимает кнопку.Вы можете узнать об этом подходе здесь: http://codex.wordpress.org/AJAX (обязательно добавьте одноразовый номер для безопасности (http://codex.wordpress.org/WordPress_Nonces)).Это также хороший ресурс для создания ловушек admin-ajax: http://codex.wordpress.org/AJAX_in_Plugins

2) Поместите кнопку в форму, POST, которая формирует ваш плагин, и добавьте некоторый код для обработки формы POST (еслисделав это, убедитесь, что вы включили одноразовый номер для безопасности (http://codex.wordpress.org/WordPress_Nonces), а также убедитесь, что пользователь, пытающийся нажать кнопку, имеет необходимые права для этого http://codex.wordpress.org/Function_Reference/current_user_can

Что выПопытка сделать это не супер сложна, но она требует хорошего понимания форм, PHP и (возможно) JavaScript. Если ваш JavaScript в порядке, я бы порекомендовал вариант 1, так как он не требует от пользователяперезагрузить страницу.

21 голосов
/ 27 ноября 2015

Хотя ответы на этой странице послужили хорошим началом, мне потребовалось некоторое время, чтобы понять, как заставить работать вариант (2). Учитывая это, следующий код может быть полезен для некоторых людей.

Если вы создаете плагин со следующим кодом, и он добавит опцию левого меню под названием «Тестовая кнопка», когда вы находитесь в области администратора. Нажмите на это, и вы увидите кнопку. Нажатие на эту кнопку запускает функцию test_button_action. В моем примере функции я поместил сообщение на страницу и записал в файл журнала.

<?php

/*
Plugin Name: Example of Button on Admin Page
Plugin URI: 
Description: 
Author:
Version: 1.0
Author URI:
*/


add_action('admin_menu', 'test_button_menu');

function test_button_menu(){
  add_menu_page('Test Button Page', 'Test Button', 'manage_options', 'test-button-slug', 'test_button_admin_page');

}

function test_button_admin_page() {

  // This function creates the output for the admin page.
  // It also checks the value of the $_POST variable to see whether
  // there has been a form submission. 

  // The check_admin_referer is a WordPress function that does some security
  // checking and is recommended good practice.

  // General check for user permissions.
  if (!current_user_can('manage_options'))  {
    wp_die( __('You do not have sufficient pilchards to access this page.')    );
  }

  // Start building the page

  echo '<div class="wrap">';

  echo '<h2>Test Button Demo</h2>';

  // Check whether the button has been pressed AND also check the nonce
  if (isset($_POST['test_button']) && check_admin_referer('test_button_clicked')) {
    // the button has been pressed AND we've passed the security check
    test_button_action();
  }

  echo '<form action="options-general.php?page=test-button-slug" method="post">';

  // this is a WordPress security feature - see: https://codex.wordpress.org/WordPress_Nonces
  wp_nonce_field('test_button_clicked');
  echo '<input type="hidden" value="true" name="test_button" />';
  submit_button('Call Function');
  echo '</form>';

  echo '</div>';

}

function test_button_action()
{
  echo '<div id="message" class="updated fade"><p>'
    .'The "Call Function" button was clicked.' . '</p></div>';

  $path = WP_TEMP_DIR . '/test-button-log.txt';

  $handle = fopen($path,"w");

  if ($handle == false) {
    echo '<p>Could not write the log file to the temporary directory: ' . $path . '</p>';
  }
  else {
    echo '<p>Log of button click written to: ' . $path . '</p>';

    fwrite ($handle , "Call Function button clicked on: " . date("D j M Y H:i:s", time())); 
    fclose ($handle);
  }
}  
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...