Anzeige
Anzeige
Software & Entwicklung
Artikel merken

WordPress erweitern: Das Blogsystem um neue Funktionen ergänzen

Als klassisches Weblog Publishing System ist WordPress auf die schnelle Veröffentlichung von Artikeln und die häufige Aktualisierung einer Website zugeschnitten. Dabei ist das System aber keinesfalls auf diese Aufgabe festgelegt und kann mit ein wenig Grundwissen in PHP und etwas Ideenreichtum für die unterschiedlichsten Anforderungen erweitert werden.

6 Min. Lesezeit
Anzeige
Anzeige

Die Open Source Software WordPress [1] ist flexibel konstruiert: Man kann sie als reines Blogsystem verwenden, das in ein paar Klicks installiert ist, und sich nur um den Inhalt kümmern – oder aber das Aussehen und den Funktionsumfang beliebig verändern. Die Möglichkeit der Erweiterung kann in vielen Bereichen ansetzen: bestehende Funktionen deaktivieren, ersetzen, erweitern oder ändern und neue Funktionalitäten ergänzen. Im Grunde ist man nur beschränkt durch die eigene
Kreativität und das eigene Fachwissen.

Vorkenntnisse

Anzeige
Anzeige

Da WordPress in PHP geschrieben ist, sind Grundkenntnisse hier unumgänglich. Um die Möglichkeiten auszuschöpfen und optimale Erweiterungen zu erstellen, ist ebenso ein gewisses Verständnis der internen Abläufe, des Hook-Systems und des Aufbaus nützlich. Hierbei macht sich die aktive Community bezahlt [2].

WordPress API

WordPress ist so konzipiert, dass kein Eingriff in die Core-Dateien notwendig ist, um eigene Erweiterungen in das System einzubringen oder bestehende Funktionalitäten zu verändern. Damit gehen bei einem Update des Systems die Anpassungen nicht verloren. Manche Funktionen lassen sich komplett ersetzen, andere können durch Ansprache erweitert oder beeinflusst werden.

Anzeige
Anzeige

Möglichkeiten zu Erweiterungen in WordPress gibt es in zwei grundlegend unterschiedlichen Bereichen. So kann man zum einen mit Hilfe der Plugin-Schnittstelle [3] Erweiterungen einbringen und an geeigneten und vorbereiteten Punkten im Core einhaken, das System verändern und erweitern. Als zweite Möglichkeit bietet sich die Theme-Schnittstelle an, die sich um das Aussehen des Weblogs im Bereich des Frontend kümmert. Auch aus diesem Bereich heraus kann man auf das Core-System zugreifen.

Anzeige
Anzeige

Der Eingriff funktioniert über sogenannte „Hooks“. Sie sind an den verschiedensten Punkten des Systems vorhanden. Einige integrieren lediglich die neue Funktion, andere lassen eine Reihe von Parametern zu und können so weitgehend beeinflusst werden.

Das Hook-System

Zu verstehen, wie diese Hooks genau funktionieren, kann in der Vorüberlegung, welche Applikation zum Einsatz kommen soll, eine große Rolle spielen. Auf die „Haken“ greift der WordPress-Core zu, um interne Funktionen aufzurufen. Gleichzeitig können zusätzliche Funktionen an diesen Punkten einhaken. Damit bleibt der Code überschaubar, besser nachvollziehbar und man kann mit eigenen Ideen eingreifen, ohne den Core anzufassen. Auf diesem Wege können Funktionen darüber hinaus schnell, einfach und unkompliziert aktiviert oder deaktiviert werden.

Anzeige
Anzeige

Hooks sind das klassische System, um Funktionen zu ändern. Man unterscheidet zwischen Action- und Filter-Hooks. Die Filter-Hooks ermöglichen den Zugriff auf spezifizierte Daten zum Filtern; Inhalt oder Text
lassen sich so schnell ändern und wieder ausgeben.

PHP
add_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1);

Listing 1

Die Action-Hooks ermöglichen via „add_action()“ das Hinzufügen und
Entfernen von Funktionen, die eine Core-Datei von
WordPress auslöst. Mit dem Aufruf einer bestimmten
Funktion des Core wird dann die jeweilige Funktion mitgenutzt, die auf den entsprechen Hook referenziert.

PHP
add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1);

Listing 2

Man kann in Erweiterungen
auch eigene Hooks setzen, die auf der API von WordPress basieren.

Anzeige
Anzeige

Eine dritte Möglichkeit, in das System einzugreifen, besteht darin, Funktionen vollständig zu ersetzen. Alle Funktionen, die diese Möglichkeit bieten und die für Plugin-Autoren interessant sind, findet man in der Datei „wp-includes/pluggable.php“. Der dort enthaltene Code sucht im System nach gleichnamigen Funktionen und wendet dann statt des Originals das alternative Skript im Core an.

PHP
if ( !function_exists('set_current_user') ) :
...

Listing 3

Dies ist insbesondere dann interessant, wenn man WordPress mit anderen Systemen verbinden will und beispielsweise in beiden Systemen auf eine User-Tabelle zugreifen will.

WordPress Stack

Um Erweiterungen für WordPress zu erstellen, ob über die Plugin- oder Themeschnittstelle eingebunden, ist es von großem Nutzen, wenn man den Prozess kennt, den die Applikation beim Aufruf durchläuft. So lassen sich die entsprechenden Konstanten und Variablen gezielt nutzen.

Anzeige
Anzeige

In folgendem Bild ist der Prozess schematisch dargestellt. Darin ist die jeweils entscheidende Datei enthalten, die die Konstanten und Variablen enthält. Konstanten werden nach dem PHP-Coding-Standard in Großbuchstaben geschrieben, Variablen bekommen ein Dollarzeichen vorangestellt. Ebenso finden sich Hinweise auf entscheidende Funktionen und Hooks des jeweiligen Bereichs. Hooks erkennt man daran, dass sie über die Funktion „do_action()“ im Core hinterlegt sind.

Mit dem Aufruf des Blog-Headers werden alle notwendigen Prozesse ausgelöst.

Mit dem Aufruf des Blog-Headers werden alle notwendigen Prozesse ausgelöst.

Alternativ kann mit Hilfe der Variable „$wp_filter“ an allen Bereichen von WordPress das System ausgelesen werden und man erhält so einen Überblick, was, wo und wie geladen wird.

Einstellungsdaten in der Datenbank ablegen

WordPress ermöglicht die Speicherung von Plugin-Daten in den bestehenden Tabellen, die Werte werden dabei in der Tabelle „options“ abgelegt. Besonders für die Konfigurationseinstellungen eines Plugins ist dies sinnvoll. Allerdings muss man nicht alle Daten dort speichern – besonders bei großen Datenmengen leidet der „normale“ Gebrauch von WordPress und eine eigene Tabelle ist sinnvoll. Es ist also im Vorfeld zu überlegen, welche Daten in welchen Mengen gespeichert werden sollen. Denkansätze dazu liefert der Artikel „Creating Tables With Plugins” [4] des WordPress-Codex.

Anzeige
Anzeige

Werden die Daten in der WordPress-Tabelle options hinterlegt, so bietet die Software unter anderem folgende Möglichkeiten:

  • Daten hinzufügen: add_option(NAME[Pflichtwert], WERT, BESCHREIBUNG, AUTOLOAD[default: yes]);
  • Daten lesen: get_option(NAME[Pflichtwert]);
  • Daten aktualisieren: update_option(NAME[Pflichtwert], NEUER\_WERT);
  • Daten löschen: delete_option(NAME[Pflichtwert]);

WordPress kann im Standard mit Arrays und Einzelwerten umgehen, es muss daher kein eigener Prozess zum Zerlegen von Arrays erstellt werden. Wenn Sie Inhalte in der Tabelle options speichern wollen, die inhaltlich zusammengehören, ist es sinnvoll, sie als Array in einem Feld abzulegen. Dies schafft nicht nur Übersicht und hält den Umfang der Tabelle kleiner, sondern ist auch wesentlich performanter und schont so die Ressourcen.

Es gibt eine ganze Reihe weiterer Funktionen, die den Zugriff auf Inhalte der Tabelle options ermöglichen, die aber meist für die Plugin-Entwicklung keine Bedeutung haben. Für einen detaillierteren Blick auf den Umgang mit Funktionen lohnt ein Blick in die „wp-includes/functions.php“.

Anzeige
Anzeige

Mit WordPress Version 2.8 werden neue Funktionen eingeführt, die speziell für Daten in der Tabelle options nützlich sind, die ständigen Veränderungen unterliegen oder nur für einen bestimmten Zeitraum nötig sind:

  • Daten setzen/aktualisieren: set_transient(NAME[Pflichtwert], WERT[Pflichtwert], ZEITRAUM IN SEKUNDEN[default: 0]);
  • Daten lesen: get_transient(NAME[Pflichtwert]);
  • Daten löschen: delete_transient(NAME[Pflichtwert]);

In der Tabelle werden diese Daten immer mit der Syntax „_transient+NAME“ abgelegt. Um diese Vereinbarung kümmert sich die Funktion, Sie müssen nur einen Namen übergeben.

Aber auch um eigene Tabellen einzurichten oder Werte in den WordPress-eigenen Tabellen zu beeinflussen, gibt es Möglichkeiten, die Arbeit mit der Datenbank einfach und sicher zu machen. Die Variable „$wpdb“ ermöglicht den Zugriff auf alle Inhalte der Datenbank, alle verfügbaren Funktionen finden sich in der „wp-includes/wp-dp.php“.

Anzeige
Anzeige

Bei allen Operationen sollten allerdings Sicherheitsaspekte nicht außer Acht gelassen werden – auch dafür gibt es in WordPress vorgefertigte Lösungen. Das Update von Werten in Tabellen wird beispielsweise mit Hilfe der Funktion „update“ erledigt, sämtliche Prüfungen werden dabei von WordPress übernommen.

PHP
$wpdb->update( $wpdb->posts, array( 'post_type' => $mytype ), array( 'ID' => $myID ));

Listing 4

Das Einbringen von neuen Inhalten geschieht mittels der Funktion „insert“.

PHP
$wpdb->insert( $wpdb->posts, array( 'post_title' => $mytitle ));

Listing 5

Eine sichere Abfrage von Daten, die nicht mit Standard-Funktionen erfüllt wird, kann mit „prepare“ gesetzt werden. Auch hierbei kümmert sich WordPress um die Sicherheit der MySQL-Abfrage.

PHP
$return = $wpdb->get_var     (
	$wpdb->prepare (
		"SELECT post_title
		FROM $wpdb->posts
		WHERE post_title = %s
		AND ID = %d",
		$title,
		$ID
	)
);

Listing 6

Funktion abfragen und prüfen

Um Komplikationen mit nicht aktivierten Plugins oder defekten Funktionen zu vermeiden, sollten Sie die Existenz der verwendeten Funktionen verifizieren.

PHP
if ( !function_exists('meine_kleine_funktion') ) {
...

Listing 7

Zusätzlich bietet sich das an, wenn klassenorientiert geschrieben wird und das Plugin eine eigene Klasse enthält. Damit kapseln Sie das Plugin und vermeiden Konflikte mit anderen Plugins.

PHP
if ( !function_exists('add_action') ) {
	header('Status: 403 Forbidden');
	header('HTTP/1.1 403 Forbidden');
	exit();
}
if ( !class_exists( 'ExamplePlugin' ) ) {
	class ExamplePlugin {

	// constructor
  function ExamplePlugin() {
  }
 }
 $ExamplePlugin = new ExamplePlugin();
}

Listing 8

Fazit: Das grundlegende Verständnis der Idee, die WordPress so flexibel macht,
sollte im Vorfeld klar sein. Es lohnt sich also, ein wenig im Quelltext von WordPress zu lesen, sich Zeit für das Kennenlernen der vorhandenen
Klassen, Funktionen und der Art und Weise, wie WordPress funktioniert,
zu widmen, bevor man mit dem Programmieren loslegt.

Mehr zu diesem Thema
Fast fertig!

Bitte klicke auf den Link in der Bestätigungsmail, um deine Anmeldung abzuschließen.

Du willst noch weitere Infos zum Newsletter? Jetzt mehr erfahren

Anzeige
Anzeige
4 Kommentare
Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

Crazy Girl

Ich habe in meiner WordPress Options Tabelle ziemlich viele Einträge für _transient_feed… _transient_feed_mod… _transient_timeout_feed… und _transient_timeout_feed_mod…
Zusammengerechnet dürfte da ein paar Hundert dabei rauskommen.
Kann ich die, evtl. bis auf den jeweils neuesten Eintrag, einfach löschen?

Antworten
Florian Endres

@Crazy Girl:

Der Autor ist momentan leider nicht erreichbar, deshalb habe ich unsere Techniker gefragt. Die Einträge stammen von der Transient API und können ignoriert werden. Das ist ein temporärer Cache, der irgendwann verfällt. Du kannst sie wohl auch löschen – sie tauchen aber erneut auf.

Antworten
Crazy Girl

Vielen Dank für Deine Antwort. Ja, sie stammen von der Transient API und da ich so einige Feeds über meine Blogroll hole erhalte ich pro Feed 4 solche Einträge. Eigentlich sollten sie sich auch selbst wieder löschen, was sie aber nur hin und wieder tun und so schwillt die Options Tabelle auch recht unnett an. Deshalb habe ich mich die Tage entschieden – nach vorheriger Datensicherung – sie einfach mal zu löschen und zu kucken was passiert. Alles paletti. Sie legen sich zwar wieder an, wie Du geschrieben hast, aber es schadet auch nicht sie hin und wieder komplett rauszulöschen, um nicht gar so viele davon anzusammeln.
Vielleicht hilft diese Info ja auch jemanden, der in Zukunft hier vorbei kommt. Aber bitte vor dem Löschen immer eine Datensicherung machen, so dass im Notfall einfach nur wieder die Tabelle zurückgespielt werden kann. Man kann ja nie wissen ;-)

Antworten
Frank

Sorry, bin nicht immer online und danke vielmals den Technikern – ja, diese neue Möglichkeit gibt es seit 2.8 und sollte vom User nicht angefasst werden (In der Regel macht das nix, sie werden neu erzeugt). Die Transient-Funktion lässt temporäre Daten in der DB zu, wobei sich der Bestand je nach Definition entfernt, WP kümmert sich darum.

Antworten

Melde dich mit deinem t3n Account an oder fülle die unteren Felder aus.

Bitte schalte deinen Adblocker für t3n.de aus!
Hallo und herzlich willkommen bei t3n!

Bitte schalte deinen Adblocker für t3n.de aus, um diesen Artikel zu lesen.

Wir sind ein unabhängiger Publisher mit einem Team von mehr als 75 fantastischen Menschen, aber ohne riesigen Konzern im Rücken. Banner und ähnliche Werbemittel sind für unsere Finanzierung sehr wichtig.

Schon jetzt und im Namen der gesamten t3n-Crew: vielen Dank für deine Unterstützung! 🙌

Deine t3n-Crew

Anleitung zur Deaktivierung
Artikel merken

Bitte melde dich an, um diesen Artikel in deiner persönlichen Merkliste auf t3n zu speichern.

Jetzt registrieren und merken

Du hast schon einen t3n-Account? Hier anmelden

oder
Auf Mastodon teilen

Gib die URL deiner Mastodon-Instanz ein, um den Artikel zu teilen.

Anzeige
Anzeige