WordPress-Plugin: Aufruffunktion bei Schaltflächenklick im Admin-Panel
Lesezeit: 5 Minuten
NSjonas
Ich muss ein WordPress-Plugin erstellen, das eine PHP-Funktion aufruft, wenn auf eine Schaltfläche in einem Admin-Panel geklickt wird. Ich habe mir Tutorials zum Schreiben grundlegender WordPress-Plugins und zum Hinzufügen von Admin-Panels angesehen, aber ich verstehe immer noch nicht, wie genau ich eine Schaltfläche für eine bestimmte Funktion in meinem Plug-in registrieren soll.
Hier ist, was ich bisher habe:
/*
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
}
?>
Obwohl die Antworten auf dieser Seite einen nützlichen Anfang darstellten, dauerte es eine Weile, bis ich herausfand, wie Option (2) funktioniert. Vor diesem Hintergrund könnte der folgende Code für einige Leute hilfreich sein.
Wenn Sie ein Plugin mit dem folgenden Code erstellen, wird eine Menüoption auf der linken Seite mit dem Namen “Test-Button” hinzugefügt, wenn Sie sich im Admin-Bereich befinden. Klicken Sie darauf und Sie sehen eine Schaltfläche. Durch Klicken auf diese Schaltfläche wird die ausgeführt test_button_action Funktion. In meiner Beispielfunktion habe ich sowohl eine Nachricht auf die Seite gestellt als auch in eine Protokolldatei geschrieben.
<?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);
}
}
?>
Sollte die action="options-general.php?page=test-button-slug" Teil verstellbar sein?
– chanchal118
25. Mai 2018 um 5:40 Uhr
Danke für die Idee! 🙂
– Schehroz Ahmed
16. März 2019 um 22:28 Uhr
Ich wünschte, ich hätte mehr Sardinen
– rtpHarry
13. April 2020 um 15:28 Uhr
Dies ist ein großartiger Boilerplate. Danke!
– Hündchen
15. Juni 2021 um 2:34 Uhr
Nun, Sie haben zwei Möglichkeiten.
1) Verwenden Sie AJAX, um einen Admin-Ajax-Hook zu erstellen, den Sie mit JavaScript ausführen, wenn der Benutzer auf die Schaltfläche klickt. Über diesen Ansatz können Sie sich hier informieren: http://codex.wordpress.org/AJAX (Stellen Sie sicher, dass Sie aus Sicherheitsgründen eine Nonce hinzufügen ( http://codex.wordpress.org/WordPress_Nonces )). Dies ist auch eine gute Ressource zum Erstellen von Admin-Ajax-Hooks: http://codex.wordpress.org/AJAX_in_Plugins
2) Fügen Sie die Schaltfläche in ein Formular ein, POSTen Sie dieses Formular in Ihr Plugin und fügen Sie Code hinzu, um das POST-Formular zu handhaben (wenn Sie dies tun, stellen Sie sicher, dass Sie aus Sicherheitsgründen eine Nonce einfügen ( http://codex.wordpress.org/WordPress_Nonces ) und stellen Sie außerdem sicher, dass der Benutzer, der versucht, auf die Schaltfläche zu klicken, über die entsprechenden Berechtigungen verfügt http://codex.wordpress.org/Function_Reference/current_user_can
Was Sie zu tun versuchen, ist nicht superkomplex, aber es erfordert ein gutes Verständnis von Formularen, PHP und (vielleicht) JavaScript. Wenn Ihr JavaScript in Ordnung ist, würde ich Option 1 empfehlen, da der Benutzer die Seite nicht neu laden muss.
Genau das, was ich brauchte. Ich habe ein gutes Verständnis von PHP, JS, Ajax usw. Ich bin nur ganz neu bei wp
– NSjonas
22. Dezember 2011 um 5:50 Uhr
@brandwaffle, ich habe Probleme zu verstehen, wie man die Funktion an eine Schaltfläche anfügt. Können Sie mich in die richtige Richtung weisen?
– Benutzer1545072
9. Juni 2013 um 14:13 Uhr
Irgendein Beispielcode? Wie soll die action Attribut der form sehen? Wie soll der Backend-Code aussehen?
– Fred
14. Oktober 2014 um 14:14 Uhr
Ich arbeite an einem ähnlichen Bedarf in einem Plugin, und meine Lösung besteht darin, ein zweites Formular zu verwenden (wie von ‘brandwaffle’ beantwortet) und dann Code hinzuzufügen, um zu überprüfen, ob das 2. Formular gesendet wurde, indem ich mir $_POST ansehe[submit] Wert. In dieses „if“ füge ich den Code (oder die Funktion) ein, der beim Klicken auf die Schaltfläche ausgeführt werden soll. Der Parameter „Aktion“ des Formulars bleibt leer, sodass der Einstellungsbildschirm des Plugins neu geladen wird.
– Rick Hellwell
25. Januar 2017 um 22:42 Uhr
8692700cookie-checkWordPress-Plugin: Aufruffunktion bei Schaltflächenklick im Admin-Panelyes