Einige Tests mit Netbeans zeigen, dass tatsächlich bereits beim Laden der Homepage (alle ?) Plugins aufgerufen werden. Wozu das eigentlich ? Der Trace zeigt sogar einen zweimaligen Aufruf.
Beiträge von maksimilian
-
-
@ b3317133 #10
Ich habe mal weitergetestet, auch im Vergleich mit einem Beispiel-Plugin, und sehe jetzt klarer. Für eine Übergangszeit werde ich einen Kompromiss eingehen, um endlich weiterzukommen. Ich verwende noch WP_Widget, toleriere den Eintrag in Tabelle wp_options und speichere die Daten in einer eigenen Tabelle (wobei es sich um Daten auch anderer im Plugin verwendeter Objekte als dem Widget handelt).
Meine Bemerkung zur verwendeten DB-Schnittstelle war nicht korrekt. Ich verwende schon wpdb. Zur Einrichtung einer Tabelle wird dabei die Funktion dbDelta aufgerufen. -
Hallo Ihr,
wie kann man mit der Aktivierung eines Plugins eine Funktion installieren, welche automatisch bei jedem Laden einer Homepage ausgeführt wird (z.B. zum Führen einer Statistik) ?
maksimilian
-
Wenn Du die Daten in eine eigene Tabelle einfügen willst, würde ich nur die Datenbankanbindung von WP benutzen und den Rest wie die create, update, delete Aktionen selber machen. Da ersparst Du dir viel Zeit dich mit den verschleierten Funktionen und Klassen herumzukämpfen.
Ich mache meistens eine Model, Factory und Action Klasse, somit ist alles schön getrennt und man weis genau wo man was finden kann und ohne grosse Doku versteht fast jeder was die Klasse macht oder wie man diese anwendet. Aber das ist natürlich Geschmacksache.
Vielleicht hilfst Du mir etwas auf die Sprünge. Sind Model, Factory und Action eingeführte Begriffe ? Kannst Du mir einen Link auf Beispiele geben ?
Als Datenbankschnittstelle verwende ich dbDelta. -
Was genau hindert Dich daran, widget(), form() und update() zu verwenden, um darin Daten aus einer eigenen Tabelle zu lesen bzw. zu speichern?
Und was genau hast Du bereits ausprobiert und was daran hat nicht funktioniert?
Wenn ich es richtig verstehe, werden die Optionswerte in $instance transportiert. Wenn ich den Standard von WP_Widget, die Optionen in der Tabelle wp_options abzuspeichern, nicht verwende, habe ich das Problem, $instance zu versorgen. Die Methode update() erhält die geänderten Optionswerte in $new_instance, bei mir bisher nicht, wenn update() nach Speichern aufgerufen wird (was jetzt der Fall ist). Ich habe den Eindruck, dass die Verwendung des Standardwidgets WP_Widget nicht geeignet ist, wenn man einen eigenen Speicherort für die Optionen einführen will.
-
Wenn man "Speichern" klickt, wird update() aufgerufen.
Wenn Dein Widget lt. WordPress-Standard implementiert ist, speichert und lädt es die Daten automatisch, ohne eigene Datenbank-Tabelle.
Das dachte ich mir bereits. In meinem jetzigen Fall handelt es sich aber um eine eigene Tabelle. Vielleicht kann ich das Standard Widget deshalb nicht verwenden.
-
@ b3317133 #2
Ich hatte u.a. versucht, in der Funktion update() der Widget-Definition eine eigene Prozedur aufzurufen, was nicht funktionierte (der NetBeans Trace steuert den gesetzten Haltepunkt in dieser Prozedur nicht an). Außerdem hatte ich mir aus den WP_Widget Methoden einige herausgesucht, deren Name nach "Sichern" aussieht wie update_callback(), save_settings(). Gut, dann versuche ich es nochmal mit update(). Ich dachte bisher, dass update() nur den Refresh der im Widget angezeigten Daten vornimmt. Ich habe im Internet bisher immer nur dieses von Dir zitierte Beispiel für update() gefunden. Mich irritiert, dass dort nie ein Abspeichern von Daten demonstriert wird.
Wird die update-Methode von der Betätigung des Speichern-Buttons ausgelöst ?
-
Hallo Ihr,
gibt es eine Methode, mit welcher in der Funktion update() des von der Klasse WP_Widget abgeleiteten Widgets geänderte Optionen in einer eigenen Datenbanktabelle gespeichert werden können ? Ich habe diverse Methoden ausprobiert, aber die richtige bisher nicht gefunden.
Was passiert, wenn im Aufruf des Widgets im Admin-Bereich der Homepage (Design > Widgets) der Speichern-Button betätigt wird. Diesen Button programmiert man ja nicht selbst.
maksimilian
-
@ r23 #7
Ich verkneife mir mal einen Kommentar zur Polemik und bedanke mich artig für den Link im Zitat. Jetzt verstehe ich, wie update/get_option() Arrays verarbeiten. Diese serialisierte Nomenklatur hatte ich ja bereits in der Datenbank gesehen, konnte sie bisher aber nicht zuordnen. -
Ergänzend möchte ich noch bemerken:
Selbstverständlich kann ich das Array vor dem Schreiben in die DB in einem String aufbereiten (so dass Array-Key und zugeordneter Wert erhalten bleiben) und das Ganze beim Auslesen rückwärts durchführen. Aber es gibt ja (mit PHP) vielleicht eine einfachere Methode. -
müssen wir dir wirklich das PHP Handbuch hier vorlesen?
Verbindet Array-Elemente zu einem String
http://php.net/manual/de/function.implode.php.
Nein, muss mir nicht vorgelesen werden. implode() beseitigt die Array-Keys, was in meinem Fall kontraproduktiv ist. -
Hallo Ihr,
ich möchte ein Array in einem DB-Datensatz abspeichern und es wieder in eine Array-Variable auslesen.
Mit update/get_option() kann einfach eine Array-Variable verwendet werden. Wie funktioniert das mit dbDelta ?maksimilian
-
Klar geht das. Du kannst die Tabelle damit erstellen oder auch in einer selbst erstellten Tabelle lesen/schreiben...
Danke für diese Links, danielgoehr. Du hast mir bisher bereits entscheidende Tipps gegeben. Auch jetzt ersparst Du mir den Vorwurf mangelnden Engagements beim Googeln. Ich war bereits auf die Funktion dbDelta gestoßen, hatte aber übersehen, dass sie mit $wpdb verknüpft ist. Und mich dann zu sehr in MySQLi verbissen, obwohl ich auch damit klarzukommen beginne.
-
z.B hier: php.net/manual/de/mysqli-result.fetch-assoc.php wobei innerhalb von WordPress wie von danielgoehr beschrieben, ein Zugriff via wpdb zu bevorzugen wäre.
Diesen Link kenne ich, komme aber, wie bereits erwähnt, mit fetch-assoc nicht klar. Werde aber weiter probieren.
-
@ danielgoehr, b3317133
Danke für Eure schnellen Antworten. Die Bedenken, wpdb nicht zu verwenden, kenne ich. Leider gibt es hiermit keine Möglichkeit, eine neue Tabelle einzurichten.
Der Wunsch hierzu entsteht bei mir während einer Testphase, während der ich zum Überprüfen von Veränderungen, oft mit phpmyadmin in die DB schaue. Wenn Eintragsänderungen via wpdb und update_options()/delete_option() gemacht werden, muss ich jedesmal die Tabelle wp_options durchkämmen, da nach Löschen/Einrichten die Tabelleneinträge wieder an anderen Stellen stehen. Wenn mein Plugin stabil ist, könnte ich natürlich zu wpdb zurückkehren. -
Hallo Ihr,
ich möchte in einem Plugin eine eigene Tabelle in der MySQL-Datenbank verwenden. Die Einrichtung der Tabelle funktioniert, nur mit dem Auslesen von Daten komme ich noch nicht klar. Z.B.
$sql_instr = "SELECT " . "option1" . " FROM " . "optionen";
$result = mysqli_query( $db_link, $sql_instr );Die Funktion mysqli_query liefert mit $result ein Objekt, über welches der ausgelesene Wert besorgt werden muss. Wie funktioniert das ? Z.B. mysqli_fetch_assoc() habe ich noch nicht erfolgreich anwenden können.
Bitte gebt mir einen Tipp oder eine Quelle, wo ich nachlesen kann. Die gegoogelten Beispiele bringen mich nicht weiter.
maksimilian
-
Im Prinzip ließe sich die Anforderung wohl durch Manipulation der plugin.php realisieren. Das wäre allerdings ein Eingriff in den Core.
-
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.
-
@ danielgoehr #12
Danke für die Antwort und den wichtigen Sicherheitshinweis. Jetzt werde ich mal weiter experimentieren.
-
@ 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.