Unauffälliges Setzen von Pluginoptionen in WordPress

Nicht selten brauchen Plugins das einmalige Setzen von sehr wenig bis einer Option, warum nicht eine Alternative überdenken, die das Backend von WordPress nicht unnötig überfrachtet.

Avatar Renè Reimann

Was mach ich hier eigentlich und warum?

Ich wollte mich mal auf eine von mir, durchaus unübliche Art und Weise bei Frank für seine stets hilfsbereite Art und für die vielen nützlichen Publikationen, in Form eines Gastbeitrages zu unserem Lieblings Thema - WordPress bedanken!.

Zwischen uns mögen Welten liegen, eigentlich sind es ca. 71km aber ich finde es immer wieder faszinierend wie ähnlich manche unserer Gedanken sind. Ok bevor ich abschweife, worum soll es denn jetzt gehen?
Ich stand vor Kurzem vor der Aufgabe ein Plugin zu entwickeln, das mit sehr wenig Optionen daher kommt - eigentlich war es nur eine Option! Aus meiner Sicht war es jetzt nicht wirklich sinnvoll, dafür eine extra Optionsseite anzulegen. Also hab ich mich auf die Suche nach einer Alternative gemacht. Die passende Idee hatte ich schnell. Ich platziere mein einzelnes Eingabefeld dort, wo es am ehesten gefunden wird. Wo das ist? Hm? Natürlich dort wo wir alle Plugins aktivieren, in der Plugin-Tabelle im Backend und zwar direkt unterhalb meines Plugins.

Nun stellt sich bei solchen Ideen folgende Frage:
Gibt es da einen Hook? "Klar mit Sicherheit!"
Wie könnte dieser oder diese Hooks heißen? "Hm keene ahnung!"

Diese beiden Fragen würde ich allerdings gerne mit euch auf dem WordCamp 2011, in der Session "Hook Me" diskutieren. Ich will hier nur das Ergebnis erläutern.

Zu erst werden wir einen weiteren Link zu den Standard Pluginoptionen, Deaktivieren und Bearbeiten hinzufügen.
Hier für wird der Hook plugin_action_links_{$plugin_file} verwendet. Dieser Hook kann 3 Werte an die aufgerufene Funktion übergeben.
Das wären array_filter( $actions ), $plugin_file und $plugin_data. Für unseren Zweck ist der Erste interessant. Mit array_filter( $actions ) erhalten wir die Standard-Optionen in Form eines Arrays, dieses Array müssen wir nun nur noch um die neue Option erweiter.


add_filter( 'plugin_action_links_plugin-options.php, 'po_plugin_action_links', 10, 3 );
function po_plugin_action_links( $array ) {
    $array['opdtions'] = '<a href="#" id="po_options_switch">' . __( 'Einstellungen', 'my_textdomain' ) . '</a>';
    return $array;
}

Jetzt hat unser Plugin eine weitere Option Einstellungen erhalten.
Wo stecken wir denn nun das Eingabefeld hin?

Wenn wir uns die Stelle wo sich der Hook "plugin_action_links_{$plugin_file}" befindet näher anschauen, finden wir wenige Zeilen weiter unten folgenden Hook "after_plugin_row_{$plugin_file}". Mit diesem Hook können wir uns eine eigene Zeile in der Tabelle unterhalb unseres Plugins erzeugen. Auch diesem Hook werden wieder verschiedene Werte übergeben, aber probiert es am besten selbst mal aus.


<?php
add_filter( 'plugin_action_links_' . $plugin, 'po_plugin_action_links', 10, 3 );
add_filter( 'after_plugin_row_plugin-options.php', 'po_row_meta', 10, 3 );

function po_row_meta( $plugin_file, $plugin_data, $status ) {

    echo  '<tr id="po_options_tr" style="display: none;"><td colspan="4">
          <script>
            jQuery(document).ready( function() {
                var po_options = jQuery( "#po_options" );
                var po_options_tr = jQuery( "#po_options_tr" );

                jQuery( "#po_options_switch" ).click( function(e){
                    e.preventDefault();
                    var display_r = po_options_tr.attr("style");

                    if( ! display_r ){
                        po_options.slideToggle( function () { po_options_tr.attr("style","display:none" ); } );

                    } else {
                        po_options_tr.show();
                        po_options.slideToggle();
                    }
                });
            });
          </script>
          <div id="po_options" style="display:none">';

    var_dump( $plugin_file, $plugin_data, $status );
    echo '</div></td></tr>';
}

function po_plugin_action_links( $array ) {
    $array['opdtions'] = '<a href="#" id="po_options_switch">Einstellungen</a>';
    return $array;
}
?>

Das war es hier von mir, für euch!
Wir sehen uns auf dem WordCamp 2011, René Reimann.

Anmerkung des Bloginhabers Frank

Eine Umsetzung dieser Form kann man in den Screenshots des Plugin WP Maintenance Mode sehen, so dass man sich ein Bild machen kann. Allerdings ist da diese Lösung mittlerweile zu überdenken, da die Optionen im Laufe der Nutzung umfangreicher geworden sind - dies ist durch Wünsche der Nutzer so entstanden; im ersten Ansatz gab es auch nur eine Option.

Gastbeitrag

Rene Reimann Avatar
Dieser Beitrag ist aus der Feder von Renè Reimann - die-pixler.de und ist ein Beitrag zum Adventskalender auf wpengineer.com zum Thema WordPress.

Vielen Dank auch hier nochmal von meiner Seite an Renè.

Comments are closed.