benutzerdefinierte Suchergebnisseite
2 Antworten
- Stimmen
-
- 2015-05-11
Ich habeeinige Empfehlungenfür Ihre Frage:
Zuerst : Verwenden Sienichtmehr
query_posts ()
. Unter dem Codex zu dieser Funktion erfahren Sie,warum Sieihnnichtin Designs oder Plugins verwenden sollten. Wenn Sie sichin einer seltsamen Situationbefinden,in der Sie keine Option haben undquery_posts ()
verwendenmüssen,sollten Siewp_reset_query ()
nach der Schleife ausführen. Siemüssen wissen,dass Sie denglobalen $ wp_query
verwenden,der die ursprüngliche Abfrage von WordPressenthält,und dann denquery_post
,der denglobalen $ wp_query
Variable,erhalten Sie unerwartete Ergebnisse. Darüber hinaus verwenden Sieeinen veralteten Parametershowposts
,der durchposts_per_page
ersetzt wird.Zweitens : Sie könneneine benutzerdefinierte Suchvorlage (search.php) verwenden,um das Erscheinungsbild anzupassen. Ordnen Sieeinfacheine search.php-Dateiin Ihrem Themenordner zu undpassen Sie sienach Ihren Wünschen an. Stellen Sie hier keinebenutzerdefinierten Abfragen. Wenn Sie diestun,erstellen Sieeine neue Abfragefür Beiträge und verschwenden diebereits von WordPress durchgeführte Abfrage. Eine Verschwendung von Ressourcenmit negativen Auswirkungen auf die Leistung.
Drittens : Um die von WordPress verwendeten Standardabfrageparameter wie die Anzahl der Beiträgepro Seite usw. zu ändern,können Sie
pre_get_posts
action .Erstellen Sie also Ihre search.php-Vorlagenach Ihren Wünschen und verwenden Sie die Aktion
pre_get_posts
,um WordPressmitzuteilen,welche Parameter Siein der Suchabfrage verwendenmöchten:Die search.php-Vorlage könnte ungefähr so aussehen:
& lt ;?php get_header (); global $ wp_query; > & lt; div class="wapper" > & lt; div class="contentarea clearfix" > & lt; div class="content" > & lt; h1 class="Suchtitel" > & lt ;?phpecho $ wp_query- >found_posts; > & lt ;?php _e ('Suchergebnissegefundenfür','Gebietsschema');? >: "& lt ;?phpthe_search_query () ;? >" & lt;/h1 > & lt ;?phpif (have_posts ()) {? > & lt; ul > & lt ;?php while (have_posts ()) {the_post (); > & lt; li > & lt; h3 > & lt; a href="& lt ;?phpechoget_permalink () ;? >" > & lt ;?phpthe_title (); > & lt;/a > & lt;/h3 > & lt ;?phpthe_post_thumbnail ('medium')? > & lt ;?phpecho substr (get_the_excerpt (),0,200); > & lt; div class="h-readmore" > & lt; a href="& lt ;?phpthe_permalink () ;? >" > Read More & lt;/a > & lt;/div > & lt;/li > & lt ;?php}? > & lt;/ul > & lt ;?phpechopaginate_links (); > & lt ;?php}? > & lt;/div > & lt;/div > & lt;/div > & lt ;?phpget_footer (); >
Und die Aktion
pre_get_posts
sieht ungefähr so aus:add_action ('pre_get_posts',Funktion ($ query) { //Überprüfen Sie,obes sich um die Abfrage handelt,die wir ändernmöchten: Front-End-Suchabfrage if ($ query- >is_main_query () & amp ;!is_admin () & amp; & amp; $ query- >is_search ()) { //Ändere die Abfrageparameter $ query- > set ('posts_per_page',3); }} });
I have some recommendations for your question:
First: stop using
query_posts()
. See the codex about this function to see why you shouldn't use it in themes or plugins. Anyway, if you are in a some weird situation where you have not option and you need to usequery_posts()
, you should runwp_reset_query()
after the loop. You must know that you are using theglobal $wp_query
, that contains the original query made by WordPress, and thenquery_post
that alter theglobal $wp_query
variable, you end up with unexpected results. Additionally, you are using a deprecated parametershowposts
, replaced byposts_per_page
.Second: you can use a custom search template (search.php) to customize the look and feel. Just cerate a search.php file in your theme folder and customize it as you want. Don't make custom queries here; if you do that, you are making a new query for posts and wasting the query already done by WordPress. A waste of resources with negative performance impact.
Third: to change the default query parameters used by WordPress, like number of posts per page, etc, you can use
pre_get_posts
action.So, create a your search.php template as you wish and use
pre_get_posts
action to say to WordPress what parameters you want to use in the search query:The search.php template could be something like this:
<?php get_header(); global $wp_query; ?> <div class="wapper"> <div class="contentarea clearfix"> <div class="content"> <h1 class="search-title"> <?php echo $wp_query->found_posts; ?> <?php _e( 'Search Results Found For', 'locale' ); ?>: "<?php the_search_query(); ?>" </h1> <?php if ( have_posts() ) { ?> <ul> <?php while ( have_posts() ) { the_post(); ?> <li> <h3><a href="<?php echo get_permalink(); ?>"> <?php the_title(); ?> </a></h3> <?php the_post_thumbnail('medium') ?> <?php echo substr(get_the_excerpt(), 0,200); ?> <div class="h-readmore"> <a href="<?php the_permalink(); ?>">Read More</a></div> </li> <?php } ?> </ul> <?php echo paginate_links(); ?> <?php } ?> </div> </div> </div> <?php get_footer(); ?>
And the
pre_get_posts
action something like this:add_action( 'pre_get_posts', function( $query ) { // Check that it is the query we want to change: front-end search query if( $query->is_main_query() && ! is_admin() && $query->is_search() ) { // Change the query parameters $query->set( 'posts_per_page', 3 ); } } );
-
Esistnicht wirklichnotwendig,"global $ wp_query" zu verwenden,wenn Sieim Vorlagenkontextnur das Objekt "$ wp_query" verwenden,wennnötig,aberich denke,esistbesser sicher als leid :-)Not really necessary to use `global $wp_query` when in template context, you can just use `$wp_query` object where necessary, but I guess better be safe than sorry :-)
- 1
- 2015-05-11
- Pieter Goosen
-
Da warichmirnicht sicher,also habeich dieglobale Referenz aufgenommen.Dankefür den Hinweis.I was not sure about that, so I included the global reference. Thanks for the note.
- 1
- 2015-05-11
- cybmeta
-
@cybmeta dankeesfunktioniertgut.Dankenochmal.Wennes Ihnennichts ausmacht,können Siemir dann sagen,wieich Paging hinzufügen soll?@cybmeta thanks it work nice. thank you again. if you never mind then you can tell me how to add paging ?
- 0
- 2015-05-11
- pagol001
-
@PieterGoosen,denkst du,ichersetzebesser dieglobale $ wp_query?zu $ wp_query;@PieterGoosen so do you think i better replace global $wp_query; to $wp_query;
- 0
- 2015-05-11
- pagol001
-
Ich habe keine Paginierungeingefügt,weil Sie keine Paginierungin Ihrem Code hatten. Ich kopiere Ihren Codenur ohne denbenutzerdefinierten Abfrageteil.Sie könnenjede der [von WordPressbereitgestellten Funktionenfür die Paginierungmehrerer Posts] (https://codex.wordpress.org/Pagination) verwenden.I didn't include pagination because you had not pagination in your code, I just copy your code without the custom query part. You could use any of the [functions provided by WordPress for multiple posts pagination](https://codex.wordpress.org/Pagination).
- 0
- 2015-05-11
- cybmeta
-
Nein,du kannstes so lassen wieesist :-).No, you can leave it as is :-).
- 0
- 2015-05-12
- Pieter Goosen
-
- 2015-05-11
Siemüssen die Schleife ausführen und Ihre search.php ähnlich wieim folgenden Code ändern.
<?php get_header();?> <div class="wapper"> <div class="contentarea clearfix"> <div class="content"> <ul> <?php if ( have_posts() ) : ?> <header class="page-header"> <p><?php printf( __( 'Search Results for: %s', 'twentyfourteen' ), get_search_query() ); ?></p> </header><!-- .page-header --> <?php // Start the Loop. while ( have_posts() ) : the_post(); ?> <li><h3><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h3></li> <?php the_post_thumbnail('medium') ?> <?php echo substr(get_the_excerpt(), 0, 200); ?> <div class="h-readmore"> <a href="<?php the_permalink(); ?>">Read More</a> </div> <?php endwhile; else : // If no content, include the "No posts found" template. get_template_part( 'content', 'none' ); endif; ?> </ul> </div> </div> </div> <?php get_footer(); ?>
You have to run the loop , modify your search.php something similar to the code below
<?php get_header();?> <div class="wapper"> <div class="contentarea clearfix"> <div class="content"> <ul> <?php if ( have_posts() ) : ?> <header class="page-header"> <p><?php printf( __( 'Search Results for: %s', 'twentyfourteen' ), get_search_query() ); ?></p> </header><!-- .page-header --> <?php // Start the Loop. while ( have_posts() ) : the_post(); ?> <li><h3><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h3></li> <?php the_post_thumbnail('medium') ?> <?php echo substr(get_the_excerpt(), 0, 200); ?> <div class="h-readmore"> <a href="<?php the_permalink(); ?>">Read More</a> </div> <?php endwhile; else : // If no content, include the "No posts found" template. get_template_part( 'content', 'none' ); endif; ?> </ul> </div> </div> </div> <?php get_footer(); ?>
-
Ändern Sieim obigen Code 'vierundzwanzig'in Ihre ThementextdomäneIn the above code change 'twentyfourteen' to your theme text domain
- 0
- 2015-05-11
- shuvroMithun
-
Vielen Dank.Wenn Siemireinen Fehlergeben Analysefehler: Syntaxfehler,unerwartetes Dateiendein .../search.phpin Zeile 34thanks. if giving me error Parse error: syntax error, unexpected end of file in .../search.php on line 34
- 0
- 2015-05-11
- pagol001
wasichgetan habe,
Icherstelleeine search.php
Erstellen Sie danneine searchform.php
abermeine Ergebnisseite zeigt keine Inhaltsbeschreibung und zeigt auchnurein Ergebnis. aber auf Titel H1 zeigtes 2/3/5/6/7 usw. Nummer Suchergebnisgefunden. Ichmöchtemindestens 10 Ergebnis und dann Seite anzeigen und auch 200/300 Zeichen Inhaltstextfür das Suchergebnis anzeigen. Jungs könnenmir helfen. Ichbin noch kein Experte wp