Standardmäßig durchsucht die WordPress-Suchfunktion Beiträge/Artikel und Seiten. Manchmal kann es jedoch sinnvoll sein, nur in Beiträge zu suchen. Zum Beispiel dann, wenn nur Seiten für Sitemap, Impressum und Datenschutzerklärung existieren. Aber auch sonst kann es Sinn machen die Suche nur auf Artikel zu beschränken.

Um die Suche auf WordPress-Beiträge zu beschränken nutzen wir wieder die add_filter-Funktion, die wir schon in vielen anderen hier vorgestellten Snippets genutzt haben. Das nachfolgende Snippet sollte in der functions.php-Datei des WordPress-Themes platziert werden.

Wie immer ein paar Worte zur Erklärung. Mit der add_filter-Funktion setzen wir einen Filter auf das pre_get_posts-Event. Dieses wird ausgelöst, bevor die Artikel bei einer Query (=Anfrage) geladen werden. An dieser Stelle greift nun unsere Suchfilter-Funktion ein, die Folgendes tut.

Zuerst wird überprüft, ob die Anfrage eine Suchanfrage ist ($query->is_search). Wenn dem so ist, wird per set-Methode der Parameter post_type auf den Wert post festgelegt und somit die Anfrage auf Beiträge beschränkt.

Suche auf andere Post-Typen einschränken

Um die Suche auf andere Artikeltypen einzuschränken, muss lediglich in der Zeile mit „$query->set“ statt „post“ ein anderer Artikeltyp angegeben werden. Doch welche Posttypen gibt es überhaupt?

Die möglichen Artikeltypen, die man hier angeben kann, lassen sich ebenfalls mit einem kleinen PHP-Snippet ermitteln. Folgende Code-Zeilen geben alle verfügbaren Posttypen aus.

Das Snippet lässt sich ebenfalls in der functions.php einbauen, sollte aber sofort nach dem auslesen wieder entfernt werden, da es zu „unschönen“ Darstellungen im Frontend/Theme kommt.

Links in Kommentaren sind ein gern genutztes Mittel von Spammern. Eine Möglichkeit die Attraktivität für Spammer zu mindern, wäre das komplette entfernen von Links in Kommentaren. Doch die Welt ist nicht nur schwarz und weiß und so posten auch ehrliche Leser ab und zu Links, die für andere Leser eindeutig einen Mehrwert haben. Statt Links also komplett zu entfernen, ist es sinnvoller, sie „unklickbar“ zu machen.

Beim „unklickbar“ machen, wird der <a>-Tag um den Link herum entfernt, sodass die gepostete URL am Ende als Plaintext im Kommentar auftaucht. Für Spammer ist solch eine Darstellung wesentlich unattraktiver, da sie aus SEO-Sicht keinen wirklichen Mehrwert bietet. Wer jedoch ernsthaft an dem Link interessiert ist, kann die URL immer noch von Hand kopieren und im Browser der Wahl öffnen.

<a>-Tags in WordPress-Kommentaren entfernen

Um Link-Tags automatisch in Kommentaren zu entfernen und die URL als Text darzustellen, reicht folgender Einzeiler.

Durch den Aufruf der remove_filter-Funktion wird die Funktion „make_clickable“ aus der Aufruf-Kette des comment_text entfernt. Ursprünglich würde der Kommentar (comment_text) durch die Funktion make_clickable geschickt, welche URLs automatisch klickbar macht. Durch den remove_filter-Aufruf, wird dies unterbunden.

Jeder, der schon einmal einen WordPress-Blog betrieben hat, wird das Problem der Spam-Kommentare kennen. Neben dem Einsatz von entsprechenden Plugins, die Spam automatisch ausfiltern sollen, kann man schon bei der Entwicklung des Themes gegen das Problem steuern.

Durch den Einsatz eines kleinen Snippets innerhalb der functions.php-Datei des Themes, lässt sich die minimale Länge von Kommentaren festlegen. Sinn befreite Kommentare wie „toll“, „Genial!“, etc. gehören damit der Vergangenheit an.

Das Snippet arbeitet wieder mit einem Filter- genauer gesagt mit dem „preprocess_comment“-Filter, welcher auslöst, wenn ein Kommentar verfasst und abgeschickt wurde. Bevor der Kommentar nun verarbeitet und in der WordPress-Datenbank abgelegt wird, klinkt sich der preprocess_comment-Filter ein und ruft unsere minimale_kommentar_laenge-Funktion auf. Innerhalb der Funktion legen wir zuerst die minimale Anzahl an Zeichen fest, die ein Kommentar haben muss.

Danach prüfen wir, ob der übermittelte Kommentar ($commentdata[‚comment_content‘]) weniger Zeichen als die vorgegebene Länge hat. Wenn dies der Fall ist, brechen wir die Kommentar verarbeitet mittels wp_die  und einer Fehlermeldung ab. Anderenfalls verlassen wir die Funktion mittels return und lassen WordPress den Kommentar verarbeiten.

Um das Artikel- bzw. Beitragsbild in WordPress automatisch zu setzen, können wir uns folgende kleine Funktion zu nutze machen. Der geeignete Ort, um diesen Code in ein WordPress-Theme einzubauen, ist wie bei fast alle hier im Blog vorgestellten Snippets, die functions.php-Datei.

Da Copy&Paste-Programmieren nicht meine Art ist, noch ein paar Worte zur Funktionsweise. Die letzten 6 Zeilen des Snippets sind der Einstiegspunkt. Über „add_action“ wird jeweils ein Zeitpunkt definiert, an dem etwas (die beitragsbild_setzen-Funktion) aufgerufen werden soll.

Die Zeitpunkte sind so gewählt, dass die Funktion immer dann aufgerufen wird, wenn entweder der Beitrag geladen, gespeichert oder veröffentlicht wird. Die eigentliche „Arbeit“ geschieht dann in der beitragsbild_setzen-Funktion.

Zuerst wird mittels der has_post_thumbnail-Funktion geprüft, ob der jeweilige Artikel bereits ein Beitragsbild hat. Nur wenn er keins hat (das ! bedeutet „unwahr“), wird daraufhin nach einem passenden Beitragsbild gesucht. Hierzu wird mittels get_children versucht alle Bilder des Artikels zu laden. Wenn Bilder im Artikel sind, wird daraufhin das Artikelbild mittels der set_post_thumbnail-Methode gesetzt.

Das excerpt (dt. Auszug), bezeichnet in WordPress die Zusammenfassung bzw. gekürzte Version eines Artikels. Verwendung findet die excerpt-Funktionalität in Themes vor allem in „Read more“- oder „Weiterlesen“-Abschnitten wie zum Beispiel auf der Startseite, im Archiv oder in den Suchergebnissen.

excerpt – Länge festlegen

Um die Länge des ausgegebenen Texts festzulegen, reicht es den excerpt_length-Filter zu nutzen. Dieser kann wie folgt geschrieben/aufgerufen werden.

In oben geschriebener Variante würde der Textauszug nun immer auf maximal 30 Zeichen begrenzt werden. Eine geeignete Stelle zum Einbau des Filters ist zum Beispiel die functions.php-Datei des jeweiligen Themes.