Das Örtchen RSS-Feed
Kategorie
Kategorie: Blog
Buttons & Statistiken
Neueste Kommentare

WordPress: Drei Probleme bei der Widget-Entwicklung

Derzeit entwickle ich mein erstes Widget für WordPress. Als Übung habe ich mir ein kleines Kontaktformular vorgenommen, welches ich auf jeder Seite im Footer platzieren möchte. Hierbei stand ich vor drei Problemen, die ich anderen Entwicklern gerne ersparen möchte.

Die Anforderungen

Das Widget soll die Daten mittels post-Methode an die aktuelle Seite verschicken (ohne Ajax) und dort mittels eines Ankers wieder zur Widget-Position springen. Meldungen werden im Widget selbst ausgegeben.

Problem 1 - Leeres $_POST

Zuerst stellte sich für mich die Frage, an welche URL ich die Formulardaten verschicken muss. Ich testete dies mit festen Angaben im action-Attribut des form-Tags. Hierbei musste ich feststellen, daß $_POST immer dann leer ist, wenn am Ende der URL der Slash fehlt. Allerdings wäre ich ohne ein Posting im offiziellen Support-Forum nie auf den Slash als Ursache gekommen.

Hinweis: Dieses Problem ist nicht wirklich lösbar und liegt daran, daß WordPress bei fehlendem Slash auf die URL mit Slash umleitet und hierbei mittels header-Funktion einen neuen Seiten-Aufruf initiert.

Problem 2 - Statische Startseite zeigt falschen Inhalt

Auf Unterseiten funktionierte das Verschicken von leeren Formularen nach dem Lösen des ersten Problems, die Startseite muckte jedoch herum. Anstatt der ausgewählten statischen Seite wurde immer der Inhalt eines Blog-Beitrags angezeigt. Hierbei handelte es sich jedoch nicht um die normale Blog-Startseite mit der Übersicht der aktuellsten Beiträge, sondern es wurde genau ein Beitrag und zwar ohne Kommentar-Formular angezeigt (also auch keine Detailseite).

Lösung: Ich kann immer noch nicht genau sagen, welche Seite nun genau angezeigt wurde, es lag jedoch definitiv an der Angabe Blog-URL plus Anker (beispielsweise http://www.example.com/#ankerName). Deswegen habe ich mich entschieden für die Startseite eine gesonderte URL zu ermitteln und hoffe, niemals innerhalb des normalen Content-Bereiches Anker zu benötigen:

 if (get_option('show_on_front') == 'page') {
    $actionUrl = home_url('/index.php?page_id=' . get_option('page_on_front'));
} 

Hinweis: Mittels der if-Anweisung stellen wir fest, daß eine statische Startseite aktiviert wurde und ermitteln hierfür eine URL mit dem nachfolgenden Muster:

 http://www.example.com/index.php?page_id=1 

Diese URL funktionierte zumindest in meinen bisherigen Tests problemlos mit Ankern, wobei die Zahl natürlich abhängig von der gewählten Seite ist.

Problem 3 - Fehler 404

Nachdem das Abschicken von leeren Formularen nun immer klappte, stand ich vor dem nächsten Problem und zwar bekam ich bei teilweise ausgefüllten Formularen öfters einen 404er Fehler angezeigt (bedeutet normalerweise eine nicht gefundene Seite). Komischerweise hatte sich jedoch die URL bei den Tests nicht mehr geändert, der einzige Unterschied waren die jeweiligen Formulardaten.

Lösung: Auch hier wäre ich niemals selbst auf die Lösung gekommen, lediglich eine Suche mit Big G förderte ein passendes Posting im offiziellen Support-Forum zu Tage. Wie in dem Kommentar erwähnt wird, darf bei keinem Formular-Element das name-Tag mit dem Wert name belegt sein. Dies funktioniert also nicht:

 <input type="text" name="name" /> 

Und dies funktioniert:

<input type="text" name="sender" /> 

Fazit

Die drei beschriebenen Probleme sind alle ziemlich gemein und so hat mich leider die Entwicklung eines kleinen Formular-Widgets ganze zwei Tage Nerven gekostet.

Hallo! Bist du neu hier? Dann abonniere doch den RSS-Feed dieses nicht mehr ganz so stillen Örtchens, um über meine geistigen Ergüsse auf dem Laufenden zu bleiben. Alternativ besteht auch die Möglichkeit, sich von FeedBurner per E-Mail über meine Ausscheidungen benachrichtigen zu lassen.

Neuen Kommentar schreiben

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
Der Inhalt dieses Feldes wird öffentlich zugänglich angezeigt, aber als rel="nofollow" markiert.
Hinweis

Kommentare beleben den Blog! Ich freue mich über jeden Kommentar. Du kannst hier offen Deine Meinung zum Artikel sagen, aber bitte beachte die Netiquette und vermeide es andere zu beleidigen.

Bitte unterlasst es die Kommentare zu SEO-Zwecken zu missbrauchen. Kommentare mit Links, die nicht zu Blogs führen (oder zu Blogs mit Grauzonen-Themen) und/oder Keywords als Namen verwenden, sind nicht erwünscht!

Möchtest Du mir einen Blog-Artikel schmackhaft machen, dann schreib die URL ohne HTML-Tag in den Kommentarbereich und ich werde diesen bei Gefallen verlinken.