Da der Titel nicht besser gelungen ist, hole ich gleich zu beginn mal ein wenig aus und erkläre was WPlize macht und wozu es gedacht ist.
WPlize ist eine Klasse, die man frei nutzen darf und soll. Sie dient dem Zugriff auf die Tabelle options von WordPress und erleichtert das Anlegen, Ablegen, Holen und Löschen von Einstellungen zu Plugins oder Themes in der Datenbank, Tabelle options, von WordPress. Durch die Verwendung dieser Klasse werden Plugins und Themes performanter und sauber aufgebaut. Es wird pro Plugin oder Theme nur ein Eintrag in der Datenbank angelegt, mit Hilfe eines Array werden diese Daten dort hinterlegt und verwaltet.
Viele Plugins legen sehr viele Daten ab, nur als Beispiel: das populäre Kontaktform-Plugin cforms legt ca. 60 Einträge ab, die damit auch sehr viele Aufrufe starten und die Last erhöhen.
Das muss nicht sein, den WordPress unterstützt im Standard das Nutzen von Arrays. Auch einzelne Einträge werden von WordPress über das interne Caching performanter gestaltet, allerdings ist dies nie so optimal wie ein Array für viele Einträge als viele Einträge in der Datenbank.
Die Lösung nutze ich schon seit geraumer Zeit und habe bisher jeweils neue Funktionen in meinen Plugins dafür abgelegt. In älteren Plugins habe ich die Vorgehensweise zum Teil noch nicht umgesetzt, bei entsprechenden Änderungen und Zeit wird dies aber passieren.
Durch eine Kommunikation mit Sergej Müller (bekannt durch sein Plugin wpSEO), dem ich diese Variante empfahl ist eine gemeinsame Arbeit entstanden, die Sergej dann gleich auf ein eigenständige Klasse erweitert hat, so dass es nun einfacher und mit viel weniger Code integrierbar ist.
Im ersten Wurf stand uns der Sinn nach einem Plugin, was den Zugriff aus anderen Plugins ermöglicht. Da wir aber glauben, dass es dann nicht zu einer Verbreitung kommt, habe wir diese Idee wieder verworfen und möchten die Klasse nun hier anbieten und stellen sie zum Nutzen frei.
Die Klasse stellt nicht die Funktionen von WordPress in Frage, sie nutzt diese ebenfalls. Sie macht es nur einfacher, dass Plugin- und Theme-Autoren einen performanteren Zugriff ohne viel Mühe haben. Die klassischen Funktion add_option, delete_option, get_option und update_option kommen trotzdem in den Funktionen der Klasse zum Einsatz.
Welche Möglichkeiten bietet die Klasse und wie bindet man sie ein?
Die Datei am besten in einem Unterordner eures Plugins oder Themes ablegen und via PHP einbinden.
if ( !class_exists('WPlize') ) {
require_once('inc/WPlize.php');
}
Dadurch stehen dann die unterschiedlichen Zugriffe zur Verfügung und sollen anhand folgender Syntax ein wenig näher erklärt werden.
Dem Download liegt auch ein Readme-Datei bei, so dass Erklärungen und Beispiele auch dort zu finden sind.
- Multi-Option initialisieren
$WPlize = new WPlize(
'my_plugin',
array(
'my_key' => 'my_value',
'your_key' => 'your_value'
)
);
- Option updaten [Variante 1]
$WPlize->update_option('my_key', 'simple_value');
- Option updaten [Variante 2]
$WPlize->update_option(
array(
'my_key' => 'my_value',
'your_key' => 'simple_value'
)
);
- Option auslesen
$WPlize->get_option('your_key');
- Multi-Option entfernen
$WPlize->delete_option();
Download:
Ist die Arbeit nicht 1 Euro wert?
Jede Spende wird dankbar angenommen und ermöglicht das weitere Arbeiten an freier Software.
Möchtest du mehr oder anders spenden, so besuche meine Wunschliste.
Download als zip-Datei: class_WPlize.zip - 3 kByte
Historie
- 26.09.2008 - Idee und Lösung
- 09.12.2008 - update der Prüfungen
Warum benutzt ihr nicht die __get und __set Magic-Methoden? Grundsätzlich finde ich den Zugriff über eine Klasse klasse (tolles Wortspiel, oder?), aber er muss auch für mich als Programmierer einfacher/schneller/kürzer sein. sonst benutze ich den alten Weg weiterhin.
Und der Download funktioniert (noch) nicht.
Aber das ist es doch gerade, mir dieser klasse Klasse (?) ist es schneller und einfacher. Zuvor musste man sich dafür eigene Funktionen bauen, oder übersehe ich was? Klassich wird mit get_option oder set_option gearbeitet, wo es auch schon im WP-Standard möglich ist, Arrays abzulegen, denn WP erkennt es automatisch. Trotzdem muss man aber das Array dann noch zerlegen und die Aktualisierung durch eine Funktion jagen.
*Download gefixt, Danke !
Ich arbeite schon etwas länger mit serialize() und unserialize() für meine neuern Plugins, und finde dies auch sehr elegant. Welchen Vorteil hätte das Plugin für mich?
@Ralf: Du bindest es als Klasse ein, ein Zeile. Dann ist der Zugriff jeweils auf die Inhalte sehr einfach und schlicht. Man muss keine eigenen Update- oder "Hol"- etc. Funktionen schreiben. Serialize() und unserialize() sind in WP nicht notwendig, denn WP unterstützt das im Standard seit Version 2.5.
Wenn ich Optionen habe, speichere ich die in einem assoziativem Array. Und das speichere ich dann mit
set_option()bzw. hole ich wieder mitget_option().Brauche ich dafür eine eigene Klasse? Ich denke nicht
LG
Dominik
Achja: unterstützt WP nicht schon sehr viel länger das automatische (de-)serialisieren von Variablen bei Verwendung von
set_option()/get_option()? Ich meine das schon mit WP 2.0 genutzt zu haben...@Dominik: bin mir nicht sicher, dachte auf jeden Fall seit 2.3.
Nochmal, die Klasse ersetzt nicht get_ und set_option, sondern nutzt diese. Aber in deinen Plugins musst di ja den Schlüssel im Array suchen oder ablegen und nur dass macht das Plugin. Der Zugriff ist damit lediglich einfacher, nicht anders. Natürlich braucht man das nicht, man kann es auch wie bisher selber coden, ohne Klasse in die jeweilige Funktion. Mit der Klasse steht nur ein Hilfsmittel bereit.
ich bau mir immer eine array auf mit meinen optionen und jag die mit ner foreach schleife in ne datenbank und genau so lösch ich sie auch wieder.
dürfte wohl dann so ziemlich genau das gleiche sein.
ist ne gute idee für die, die es brauchen, für mich jedoch überflüssig. werds aber doch mal später am abend durchschauen und sehen ob es vorzüge hat die ich nicht bedenke.
verrückt. ich bin leider kein coder und da klingelt mir die klasse ganz schön im kopf hin und her.
@Ralf
Du kannst das Array direkt speicher, eine foreach-Schleife ist völlig überflüssig
@Frank
Hilfsmittel sind immer gut. Nur denke ich, dass hier eine eigene Klasse für soetwas profanes, nämlich dem Wrappen von
get_option()undset_option()etwas überdimensioniert ist... Davon abgesehen ist einmal$o = get_option('pluginname')und dann der Zugriff auf$o['irgendeine-option']ziemlich billig.Cooler fänd ich jetzt aber ne Klasse, die mir das Verwalten der Plugin-Oberfläche im Backend erleichtert: Klasse einbinden, Erscheinungsbild festlegen und passende Seite ausgeben...
LG
Dominik
@Dominik: das gibt es bereits WPF - WordPress Plugin Framework, allerdings ist das eventuell zu oversized, denn das Framework bietet natürlich mehr Inhalte als nur der Zugriff auf die Oberfläche.
och war das gestern so spät... ja ich benutz immer serialize und vorher nutzte ich ne foreach schleife...
niemals bis 1 uhr ein shop programmieren und nebenher blogs lesen, wird man ganz verwirtt
Eigentlich schade, dass noch keiner Frank gelobt hat:
Feine kleine Klasse.
Nun, es scheint an dieser eleganten Programmierug zu liegen, dass WPSeo (grade gekauft) bei mir nach der Aktivierung nur einen FATAL ERROR anzeigt:
Warning: wpSEO::require_once(inc/wplize.class.php) [wpseo.require-once]: failed to open stream: No such file or directory in....Pfad zu WPseo line 12.
Claudia,
erstens, ist es hier kein Blog für wpSEO oder so. Wenn du Fehlermeldungen hast oder Unterstützung zu wpSEO brauchst, dann weiß du, wie du den Entwickler kontaktieren kannst - die Informationen dazu habe ich an jeder nur erdenklichen Stelle auf der wpSEO Website hinterlegt.
Zudem ist die Fehlermeldung ja sehr aussagekräftig und besagt, dass die Datei im angegebenen Verzeichnis nicht gefunden wurde - diese liegt aber dem heruntergeladenen ZIP-Archiv definitiv bei. Bitte alles per FTP hochladen, nicht nur Teile davon.
Sorry für die verspätete Antwort, aber Philipp meinte hier wohl, dass man anstatt die Funktionen
$WPlize->get_option()etc. zu definieren, man auch die Magic Methods hätte nutzen können. Dann geht es einfacher. z.B. mit$WPlize->myplugin_options = array($key, $value)Ich denke, dies sollte man in Erwägung ziehen...
@Pascal Birchler
Hatte ich damals zugunsten PHP4 drauf verzichtet.