Wordpress suche anpassen/verbessern

godlike

Warp drölf
Veteran
Registriert
13 Juli 2013
Beiträge
14.290
Ort
Topkekistan
So, nach dem ich die letzten Jahre immer auf die normale Wordpress-Suche gesetzt habe, die m.M.n. echt eher bescheiden ist, bin ich daran diese etwas zu verbessern. Unter Anderen will ich am Ende eine "Erweiterte Suche" (ähnlich der Suche beim vB Board hier) die es mir ermöglicht einerseits Volltext, sprich die Artikel, Überschriften usw. an sich, und davon separiert aber auch z.B. Tags zu durchsuchen.

Dazu habe ich mir schon ein mal eine eigene Such-Seite angelegt. Die Anzahl der Treffer angepasst sowie auch die Ausgabe der Treffer etwas ausgemistet.

Mir ist klar das es viele Plugins gibt. Diese sind aber oft überladen und werden irgendwann nicht mehr weiter entwickelt. Darum würde ich gerne auf eine eigene Lösung ausweichen. Jetzt suche ich schon seit geraumer Zeit wie ich z.B. ausschließlich nach Tags suchen kann, fündig bin ich aber leider noch nicht geworden :dozey:

Hintergrund: Meine Seite beschäftigt sich ja mit Rezepten. Nun will ich über die Tags quasi eine Rezeptsuche basteln. Man gibt ein was im Haus ist und bekommt passende Vorschläge ausgespuckt.

PS: So sieht es momentan aus (Achtung, noch in der Mache ;)):

Jemand dazu Ideen oder Links wie ich das mit der Tags-Suche machen könnte? Sonstige Anregungen?

Gruß godlike
 


Hier wird eine Tag-Suche beschrieben. Das ist aber nicht auf meinen Mist gewachsen, daher wie immer ohne Gewähr.
 
  • Thread Starter Thread Starter
  • #3
Hehe, die Seite hab ich analog zu deinem Posting auch gerade gefunden gehabt ;) Das Problem hierbei ist das ich so einen Tag aus der Liste aller Tags wählen muss UND dazu noch ein Suchwort eingeben soll. Für den Nutzer im Endeffekt unbrauchbar da nur nach einem Tag + Suchwort gesucht werden kann. Dabei kommt nichts brauchbares raus. Der Sinn wäre ja nach mehreren Tags über ein Input-Feld zu suchen. Wenn die dann per AND-Bedingung gefiltert werden bleibt ja nur noch das drin was alle gesuchten Tags beinhaltet.

Wenn ich allerdings dem Input-Feld einfach name="tag" gebe werde ich zu den Tag-Ergebnissen weiter geleitet. Nur bei name="s" komme ich zur Suchergebnis-Seite. :dozey:
 
Mag vielleicht etwas overkill sein, aber guck dir doch mal das für den Suchserver an.


EDIT: Never mind… hab das mit den Tags überlesen.
 
  • Thread Starter Thread Starter
  • #5
Ok, im Endeffekt war die Lösung recht simpel. Einfach dem Input-Feld name="tag" geben:

[src=html4strict]<input type="text" name="tag" value="" placeholder="Suchwörter…" maxlength="50" required="required" />[/src]

So kommt man allerdings automatisch zu der Tag-Ansicht. Will man hier auch die Ansicht der "normalen" Suchergebnisse behilft man sich damit das man quasi search.php dupliziert und als tag.php abspeichert. Somit greift das Template ;)

Gruß godlike
 
  • Thread Starter Thread Starter
  • #6
Ok, jetzt muss ich den Mist doch noch mal ausgraben. Ich hab jetzt ja die zwei verschiedenen Suchen. Ein mal per Tag und die andere Volltext. Klappt so weit ja auch. Nur die Ergebnis-Anzahl ist noch nicht nach meiner Zufriedenheit. Hier nimmt WP, warum auch immer, die im Backend eingestellte Anzahl der Artikel pro Seite. Ist m.M.n. quatsch. Erst recht da ich in meinem Fall nur noch die Headlines ausgeben lasse ( ). Ich will natürlich mehr als 3 Ergebnisse angezeigt bekommen.

Man kann die Anzahl zwar mit dem folgenden PHP-Snipped anpassen

[src=php]$posts = query_posts($query_string.'&posts_per_page=25');[/src]

Das klappt aber nur bei der !

Nun soll das ja aber auch für die gelten. Die Frage ist wie ich das anstelle? Google hat mir bislang leider nicht geholfen :(

Viele Grüße

godlike

PS: Momentan siet die Ausgabe so aus (falls es hilft)

[src=php]<div id="content" class="narrowcolumn">
<h3><?php echo $wp_query->found_posts; ?> Artikel die folgende Begriffe und Zutaten enthalten:</h3>
<h2><?php the_search_query() ?></h2>
<?php if (have_posts()) :
if(function_exists('wp_pagenavi')) { wp_pagenavi(); } ?>
<div class="navigation">
<div class="alignleft"><?php next_posts_link(__('« Vorherige Suchergebnisse')) ?></div>
<div class="alignright"><?php previous_posts_link(__('Weitere Suchergebnisse »')) ?></div>
</div>
<div style="padding-top: 40px; padding-bottom: 10px;">
<?php $posts=query_posts($query_string . '&posts_per_page=25');
while (have_posts()) : the_post(); ?>
<h2 id="post-<?php the_ID(); ?>" style="font-size:100%"><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php printf(__('Permanent Link to %s', 'de_DE'), the_title_attribute('echo=0')); ?>"><?php the_title(); ?></a></h2>
<?php endwhile; ?>
</div>
<?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); }
else : ?>
<h2 class="center"><?php _e('No posts found. Try a different search?', 'de_DE'); ?></h2>
<?php get_search_form(); ?>
<?php endif; ?>
</div>[/src]

(ja ich weiß, ist noch unsauber...)
 
Zuletzt bearbeitet:
In's Blaue geraten... Probiere es mal mit 'showposts=999' anstelle von posts_per_page.
 
  • Thread Starter Thread Starter
  • #8
Das klappt leider nicht. Auf die Ausgabe der Tag-Suche hat es gar keine Auswirkung, die normale Suche funktioniert nach der Anpassung aber gar nicht mehr...
 
Mit dem pre_get_posts Filter kannst du dich in die Query einhaken und mit is_tag() prüfen ob du auf der Archiv-Seite ist. Wenn das der Fall ist die posts_per_page hoch setzen.

Kann heute mittag eine Funktion schreiben. ;-)
 
Zuletzt bearbeitet:
  • Thread Starter Thread Starter
  • #10
Nun ja, ich bin afaik ja nicht auf der Archiv Seite, nutze ja nur das entsprechende Template. Also sind die Suchergebnisse eigentlich die Archiv-Seiten? Weil wenn ich z.B. einen beliebigen Monat aufrufe, der ja als Archiv gekennzeichnet ist, bekomme ich eine völlig andere Darstellung. Siehe . Eigentlich funktioniert das Ganze ja wunderbar wenn ich die "normale" Volltextsuche nutze, nur bei den Tags halt nicht.

Kann heute mittag eine Funktion schreiben. ;-)
Das wäre klasse, ich steige da nämlich nicht so sehr durch :dozey:

:)
 
[src=php]
function tag_search_filter( $query ) {
if( is_tag() ) {
$query->set( 'posts_per_page', 25 );
}
}
add_action( 'pre_get_posts', 'tag_search_filter' );[/src]

Versuch das mal in die functions.php einzufügen. Hab es leider nicht hinbekommen den Code einzurücken. :p
 
  • Thread Starter Thread Starter
  • #12
Wow, klasse! Funktioniert tadellos :T

PS: mit folgendem Code in der functions.php kann man sich das oben genannte Snipped auch sparen :)

[src=php]function change_wp_search_size($queryVars) {
if (isset($_REQUEST['s']) )
$queryVars['posts_per_page'] = 25;
return $queryVars;
}
add_filter('request', 'change_wp_search_size');[/src]

Super, so hab ich mir das vorgestellt :)

Vielen Dank und Grüße

godlike

Edit: Ok noch mal ich :cool:

Die Suchergebnisse werden jetzt ja brav ausgegeben. Passt alles. Wenn ich nach Tag's suche klappt das zwar, so wie ich es sehe sucht er aber mit einer OR Verknüpfung. Eine AND wäre mir aber lieber. Er findet bei "käse, nudeln, tomaten" nämlich auch Artikel wo der Tag "tomaten" nicht vor kommt. Soll ja eher nicht so sein. Am besten wäre natürlich so was in der Art:

[src=php]'%käse%' AND '%nudel%' AND '%tomate%'[/src]

So wären auch Tags wie "nudeln" oder "tomaten" abgedeckt :coffee:

Ideen?
 
Zuletzt bearbeitet:
Zurück
Oben