1. Herzlich willkommen bei WPDE.org, dem grössten und ältesten deutschsprachigen Community-Forum rund um das Thema WordPress. Du musst angemeldet oder registriert sein, um Beiträge verfassen zu können.
    Information ausblenden

Bei Plugin Aktivierung zusätzliche Option abrufen

Dieses Thema im Forum "Plugins und Widgets" wurde erstellt von maksimilian, 21. April 2017.

  1. maksimilian

    maksimilian Well-Known Member

    Registriert seit:
    3. Februar 2015
    Beiträge:
    114
    Zustimmungen:
    0
    Hallo Ihr,

    wie fügt man bei einem selbst implementierten Plugin zu den Standard-Optionen Aktivieren/Deaktivieren und Bearbeiten weitere eigene Aktivierungs-Optionen hinzu ?

    maksimilian
     
  2. b3317133

    b3317133 Well-Known Member

    Registriert seit:
    21. November 2014
    Beiträge:
    11.636
    Zustimmungen:
    1.778
  3. maksimilian

    maksimilian Well-Known Member

    Registriert seit:
    3. Februar 2015
    Beiträge:
    114
    Zustimmungen:
    0

    Danke, b3317133, für den schnellen Tipp !
     
  4. maksimilian

    maksimilian Well-Known Member

    Registriert seit:
    3. Februar 2015
    Beiträge:
    114
    Zustimmungen:
    0
    Gut, die neue Aktivierungs-Option kann ich anfügen. Wie erreiche ich es, dass durch Anklicken dieser Option eine Aktion ausgelöst wird. In meinem speziellen Fall möchte ich eine Auswahl zwischen 2 Einstellungen anbieten und das Ergebnis mit update_options() abspeichern.
     
  5. danielgoehr

    danielgoehr Well-Known Member

    Registriert seit:
    13. Juli 2016
    Beiträge:
    2.674
    Zustimmungen:
    128
    Ich glaube ehrlich gesagt, dafür sind die Links nicht gedacht. Das sind halt wirklich Links.

    Aber du könntest als Workaround einfach die Plugin-Seite als href angeben, dann einen GET-Parameter anhängen und dann abfragen, ob der Parameter gesetzt ist (und falls ja, deine Funktion ausführen).
     
  6. maksimilian

    maksimilian Well-Known Member

    Registriert seit:
    3. Februar 2015
    Beiträge:
    114
    Zustimmungen:
    0
    Ich habe in das Plugin folgenden Code eingebaut:

    add_filter( 'plugin_action_links_' . plugin_basename(__FILE__), 'add_action_links' );
    function add_action_links ( $links ) {
    $mylinks = array(
    '<a href="' . admin_url( 'options-general.php?page=myplugin' ) . '">Visibility</a>',
    );
    return array_merge( $links, $mylinks );
    }

    Wenn ich auf der Plugin-Seite "Visibility" auswähle, kommt die Meldung
    "Du bist leider nicht berechtigt, auf diese Website zuzugreifen."

    Ich habe die Rolle "Administrator".
     
  7. b3317133

    b3317133 Well-Known Member

    Registriert seit:
    21. November 2014
    Beiträge:
    11.636
    Zustimmungen:
    1.778
    Wie genau wird die 'myplugin' Seite Deines Plugins via add_menu_page() in das WordPress Menü eingefügt?
     
  8. maksimilian

    maksimilian Well-Known Member

    Registriert seit:
    3. Februar 2015
    Beiträge:
    114
    Zustimmungen:
    0
    @ b3317133 #7

    Ich muss mich entschuldigen, denn ich habe den oben zitierten Code aus einem Beispiel übernommen und nicht genau genug überprüft. myplugin ist bei mir nicht definiert und muss wohl erst mit add_menu_page() erzeugt werden. Ich schaue mir die Funktion erst mal genauer an.
     
  9. maksimilian

    maksimilian Well-Known Member

    Registriert seit:
    3. Februar 2015
    Beiträge:
    114
    Zustimmungen:
    0
    Also, ich komme nicht vorwärts. Offensichtlich kann man mit plugin_action_links_ tatsächlich nur einen Link und keinen Prozeduraufruf als Action Link einrichten. danielgoehr hat mir einen Workaround empfohlen, den ich noch nicht durchblicke.
    Noch einmal, was ich erreichen möchte: einem Plugin einen Action Link hinzufügen, mit welchem eine Prozedur im Plugin-Code aufgerufen wird. Diese Prozedur soll ein kleines Menü anzeigen, welches Parametereingaben ermöglicht.
     
  10. danielgoehr

    danielgoehr Well-Known Member

    Registriert seit:
    13. Juli 2016
    Beiträge:
    2.674
    Zustimmungen:
    128
    Dafür wäre mein Workaround nicht wirklich geeignet. Das Menü muss ja irgendwo her kommen. Das heißt, eigentlich musst du erstmal die Seite erzeugen (mit add_menu_page() ) auf der dein Menü dann sein soll und dann per action_link dorthin verweisen. Das wäre ja auch eigentlich der "normale" Vorgang. Vielleicht erklärst du nochmal, wie genau und warum du davon abweichen möchtest/musst.

    Du hattest mir ja auch vorhin eine PM geschickt. Darin meintest du, das Ganze sollte auch funktionieren, wenn das Plugin gar nicht aktiviert ist. Das dürfte nicht möglich sein, weil ein deaktiviertes Plugin ja quasi keinen Code einbindet.


    Trotzdem kurz mein Workaround in sehr verkürzert Form (ungetestet):

    Du setzt als Ziel des Links die Plugin-Seite und hängst dort aber einen GET-Parameter (z.B. "?dein_parameter=dein_wert") an.

    Dann kannst du mit ...
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    ... beliebigen Code ausführen.

    Aber wie gesagt, das setzt natürlich voraus, dass dein Plugin aktiviert ist.
     
    #10 danielgoehr, 6. Mai 2017
    Zuletzt bearbeitet: 6. Mai 2017
  11. maksimilian

    maksimilian Well-Known Member

    Registriert seit:
    3. Februar 2015
    Beiträge:
    114
    Zustimmungen:
    0
    @ danielgoehr #10

    Ich hatte die PM geschickt, weil mein letzter Post erst nach sehr langer Zeit akzeptiert wurde (für einen Neuling ein ungewohntes Verfahren in diesem Forum).
    Dass ein Action Link einem Plugin erst nach dessen Aktivierung hinzugefügt werden kann, ist mir jetzt klar. Ich stelle inzwischen fest, dass die Verwendung von add_menu_page() für mich keine Möglichkeit ist, weil diese Funktion ja einen Eintrag in der Dashboard Menüliste erzeugt. Mit Deinem Vorschlag mit der Verwendung der Variablen $_GET komme ich (noch) nicht klar. Ich verfolge jetzt mal den Ansatz mit einem zusätzlichen PHP-Script. Das lässt sich mit dem hinzugefügten Action Link aufrufen. Es gibt aber ein Problem mit der Ablaufumgebung für dieses Script. Wenn beispielsweise dort der Aufruf der Funktion get_option() vorkommt, wird diese erst gefunden, wenn option.php explizit includiert wird. Das setzt sich dann fort, d.h. alle php-Dateien müssen includiert werden, aus welchen Funktionen aufgerufen werden (z.B. plugin.php für apply_filters(), load.php fpe wp_installing() usw. ). Gibt es eine einfachere Methode im Script die notwendige Ablaufumgebung herzustellen oder mache ich da was falsch ? Ich hoffe, mich genügend deutlich ausgedrückt zu haben.
     
  12. danielgoehr

    danielgoehr Well-Known Member

    Registriert seit:
    13. Juli 2016
    Beiträge:
    2.674
    Zustimmungen:
    128
    Normalerweise sollte es reichen, wenn du wp-load.php per require oder include lädst. Danach sollten dir alle Funktionen zur Verfügung stehen.

    Du solltest dann aber in dem externen Script unbedingt die Berechtigungen prüfen. Sonst baust du dir da ggf. eine echte Sicherheitslücke zusammen...
     
  13. maksimilian

    maksimilian Well-Known Member

    Registriert seit:
    3. Februar 2015
    Beiträge:
    114
    Zustimmungen:
    0
    @ danielgoehr #12

    Danke für die Antwort und den wichtigen Sicherheitshinweis. Jetzt werde ich mal weiter experimentieren.
     
  14. maksimilian

    maksimilian Well-Known Member

    Registriert seit:
    3. Februar 2015
    Beiträge:
    114
    Zustimmungen:
    0
    Ich mache es mir erst einmal leichter und verwende add_option_page(). Beim Stöbern in Plugins bin ich auf wp-clean-up gestoßen; damit komme ich weiter. Jetzt ist mir klar, wie die Verwendung von $_GET gemeint ist. Eine Eingabe beim Frontend muss im Backend abgeholt werden.
     
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden