Подтвердить что ты не робот

Плагин Wordpress: функция вызова при нажатии кнопки на панели администратора

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

Помогите мне с некоторыми примерами или хорошими ресурсами plz

Вот что я до сих пор

/*
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
} 


?>
4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Несмотря на то, что ответы на этой странице послужили полезным началом, мне потребовалось некоторое время, чтобы выяснить, как получить вариант (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);
  }
}  
?>