Für Menschen · Seien Sie begeistert und Sie werden begeistern !
Die Suche von WordPress lässt sich mit einer Vielzahl von Plugins aufwerten, in der Performance stören oder bunter gestalten. Für jeden Wunsch findet sich sicher etwas. Ich möchte aber im folgenden einen kleinen Codeschnipsel vorstellen, der nicht derartige Aufgaben erfüllt, sondern er gibt dem Anwender lediglich die Information, wie viele Beiträge hat die Suche gefunden. Mit dieser kleinen aber feinen Hilfe, wie ich finde, bekommt der Suchende einen Mehrwert.
Wie so ein Ergebnis aussehen kann, das zeigt der folgende Screenshot. Der Code gibt lediglich die Zahl der gefundenen Artikel aus und kann natürlich beliebig angepasst und formatiert werden.

Um Das Ergebnis dem Suchenden zu präsentieren nutze ich als Lösung einfach einen Query von WordPress, quasi einen extra Loop. Diesen Loop definiere ich neu und gebe vor, dass alle (-1) Einträge genutzt werden sollen. Wird der Parameter showposts nicht mit -1 übergeben, so nutzt WordPress den Wert, der in den Einstellungen für die Ausgabe im Frontend genutzt wird.
Die Funktion wp_specialchars nutze ich nur zum Filtern, so dass keine XSS-Lücke entsteht und trotzdem der Suchbegriff mit in die Ausgabe einbezogen werden kann. Der Code ist einfach und überschaubar - experimentiert damit. Ich freue mich auch über Verbesserungen und bessere Nutzwerte.
<h2>Ergebnisse der Suche<br /><small>
<?php /* Search Count */
$allsearch =& new WP_Query("s=$s&showposts=-1");
$key = wp_specialchars($s, 1);
$count = $allsearch->post_count;
_e('Begriff: ');
echo $key;
_e(' — ');
echo $count . ' ';
_e('Artikel'); wp_reset_query(); ?></small></h2>
Der Code gehört am besten in die search.php des verwendeten Themes. Sollte die Datei nicht vorhanden sein, dann wird in der Regel die Suche über die index.php mitbehandelt. Um die Suche aber für Nutzer extra und zielsicherer zu gestalten, empfiehlt sich das eigene Template.
$wp_query->found_postsDas obige Beispiel soll die Funktion verdeutlichen, soll aber nicht dafür sorgen, dass man mehrere Loops im Template nutzt. Im folgenden ein einfaches Beispiel für das Template search.php, um die Anzahl der Suchergebnisse auszugeben und nur einen Loop im Template zu haben.
<?php get_header();?>
<h2>Ergebnisse der Suche<br /><small><?php echo $wp_query->found_posts; ?> Artikel</small></h2>
<?php if (have_posts()) { while (have_posts()) : the_post(); ?>
<div class="post" id="post-<?php the_ID(); ?>">
<h3><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"><?php the_title(); ?></a></h3>
<?php the_excerpt(); ?>
</div>
<?php endwhile; } else { ?>
<p><?php _e('Nichts gefunden, was den Suchkriterien entspricht.', 'basis'); ?></p>
<?php } ?>
<?php get_footer(); ?>
bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.
Das Weblog wird angetrieben von WordPress und aktuell gibt es 980 Beiträge, 18722 Kommentare in 14 Kategorien und 464 Tags.
Das Blog wird liebevoll mit xHTML & CSS in Handarbeit gestaltet. Erstellt mit ♥ zum Befüllen und Erhalten.
Design und Code ist unter Copyright
© 2001 - 2012 bueltge.de [by:ltge.de]
3. September 2008 um 08:34
Du sollst vielleicht noch den Parameter "&page=$page" in deinen WP_Query einbauen, damit das Paging läuft.
Gruß Dennis
3. September 2008 um 08:59
Bei mir gibt es einen Fehler bei "wp_reset_query();". Aber wenn ich das weg lasse funktioniert es auch!
Liegt es vielleicht daran, dass "wp_reset_query();" nur bei WP2.5 funktioniert?
3. September 2008 um 08:59
@Dennis Morhardt: Ist in dem Fall nicht relevant, da es ja nur als Counter dient, der Query erstellt nur die Anzahl der Suchergebnisse, daher ist kein Pagination erforderlich
3. September 2008 um 09:00
Ach, ich hätte ja genauer lesen müssen.
3. September 2008 um 12:10
@Lutz: jap, dazu kommt noch ein Beitrag. Man benötigt wp_reset_query() nicht in jedem Fall.
3. September 2008 um 14:29
Da stellt sich mir die Frage: Warum der extra Loop? $wp_query->found_posts funktioniert gemeinhin doch bestens?
3. September 2008 um 14:47
@fym: Nur für dieses Beispiel; wenn man einen Loop schon aktiv nutzt, zur Ausgabe der Artikel, dann kann man mit
echo $wp_query->found_postsdie Anzahl der gefunden Artikel direkt ausgeben.Vielleicht sollte ich noch einen Nachtrag einbauen, nicht das dann alle Templates mit mehreren Loops ausgerüstet sind.
3. September 2008 um 15:15
Danke, gleich eingebaut.
3. September 2008 um 16:13
Hi Frank, habs mal ausprobiert. Nun, bei 12 Ergebnissen zeigt es mir auf Seite1 10 an und auf Seite2 2, und nicht die gewünschte gesamtZahl 12
Irgendwas scheint da doch zu fehlen...
3. September 2008 um 16:45
Vielen Dank für den Artikel zu dem sehr interessanten Thema "Suche in WordPress"! Freuen würde ich mich über einen Vergleich der div. Plugins zum "Aufbohren" der doch ziemlich mageren Standardsuchfunktion von WP. So im Nebensatz schreibst du von Plugins, die "in der Performance stören". Derartige Sorgen haben mich bislang davon abgehalten ein Plugin zu installieren, mit dem man beispielsweise die Suche auf bestimmte Kategorien beschränken kann, es war wohl Advanced Search. Ab einer gewissen Größe eines Blogs kann man ja die Sidebars noch so gut gliedern und strukturieren, oft hilft nur noch die Suchfunktion und die ist in den meisten großen und populären Blog eher bescheiden. Wenn ich z.B. in diesem Blog hier die Stichworte "Plugin" und "Suche", wie bei Google gewohnt in das Suchfeld eingebe, kommt zwar der Beitrag oben an erster Stelle, aber schon bei den folgenden Beiträgen weiß ich nicht, warum sie kommen und ehrlich gesagt die Angabe, dass die Suche in 111 Artikeln fündig geworden ist zwar nett, ohne die Möglichkeit der Eingrenzung der Treffer aber schon fast entmutigend. Es ist doch mühsam 111 Artikel "von Hand" zu filtern.
3. September 2008 um 20:39
@Olaf: bei mir fehlt nix, zumindest läuft es in allen Blogs, wo ich es einbaue, so auch hier. Suche mal in meinem Blog nach "wordpress". Eventuell hast du eine Inkonsistenz mit deinem Loop.
3. September 2008 um 20:41
@Gebintit: Damit hast du nicht unrecht, allerdings ist mir in allen Tests nichts besseres bekannt als das besagte Advanced Search. Alternativ kann man sich nur Google ins Blog holen und eine Custom Search in das Blog aufnehmen.
3. September 2008 um 21:44
Danke Frank, fürs Feedback, ist aber auch egal, wollte es eh nur mal ausprobieren...
@Gebintit
Wenn ich WP einrichte gehören AdvancedSearch Lite, Search_Hilite Reloaded und Search Excerpt modified zum Standard, damit bekommst du ausagekräftige Suchergebnisse! Dazu hab ich auf meinem Server Mysql so angepasst, dass es auch Wörter mit 3 Buchstaben findet.
3. September 2008 um 22:12
@Frank: In meinem Fall möchte ich Google nicht ins Blog holen, denn das von mir betreute Blog richtet sich vor allem an Leute, die einen Bezug zur Institution haben (ein Gymnasium) und nicht an die breite Öffentlichkeit. Über robot.txt habe ich sogar die Robobs von Google und Co angewiesen, mein Blog nicht zu indizieren, falls einer meiner Autoren gegen Copyright oder sonstige Rechtssachen verstoßen hat und ich das nicht gleich bemerke. Vielleicht bin ich übervorsichtig, aber ich habe schon mal Lehrgeld bezahlen müssen. Ich werde dann mal mit Advanced Search herumspielen. Mir schwebt vor, nach einer Standardsuche mit vielen Treffern, einen Link zu Erweiterten Suche anzubieten.
13. September 2008 um 00:16
Hallo Frank,
habe es mal testweise in einem Testblog ausprobiert und klappt wunderbar.
Zwar hat das von mir benutzte Theme Blitzblank keine eigene search.php, aber in der index.php befindet sich die Suchabfrage.
Werde es in Kürze auch in mein Blog einbauen.
Danke für diesen hilfreichen Tipp.
Beste Grüße
Dieter
26. April 2009 um 11:45
Hallo Frank
Danke für den tollen Beitrag.
Das hat mich schon immer an der Suche gestört, dass die Anzahl der Beiträge nicht angegeben wird.
19. Juli 2010 um 14:17
ich habe eine Frage zur Suchausgabe. Wie kann ich diese dahingehend modifizieren, dass mir statt eines ganzen Post´s nur das was der User gesucht hat ausgegeben wird?
Ich betreibe einen "Linksammlungen" Blog. Wenn meine User z.b. nach einen Namen suchen zb. DJ Hell dann spuckt WP alle Posts aus in denen DJ+Hell vorkommt. Das heißt er muss srollen, scrollen, scrollen. Praktischer wäre es, wenn nur der Post Title und drunter das gesuchte Wort / Link erscheint.
Wenn mir da jemand helfen kann wäre ich sehr dankbar.
Viele Grüße
20. Juli 2010 um 13:11
@Toni: nicht im Standard möglich, lediglich mit einem Plugin oder schaue dir mal den Artikel von Sergej an.
20. Juli 2010 um 14:30
@ Frank
danke für die schnelle Reaktion.
das es mit der standardausgabe nicht möglich ist habe ich leider schon erfahren müssen. dein link zum sergej post habe ich mir angeschaut, liefert aber nicht das was ich will.
hab schon alles abgesucht..
du sagst es gibt dazu plugins? welche?
Hier sieht man eigentlich genau was ich für eine Ausgabe brauche:
http://www.soundrevolt.com/search.php?search_keywords=hellWenn jemand Tipps hat oder sich das zutraut kann er sich gerne melden.
Lasse auch was springen
Grüße
20. Juli 2010 um 14:49
@Toni: ich vermute, du wirst nicht dein Ziel erreichen; mySQL kann nicht viel mehr als den Abgleich, daher ist mySQL für eine komplexe Suche ungeeignet und da kann man auch mit Plugins wenig aufbohren.