pagina dei risultati di ricerca personalizzata
2 risposta
- voti
-
- 2015-05-11
Ho alcuni consigliper latua domanda:
Primo : smetti di utilizzare
query_posts ()
. Vedi il codice su questafunzione per capireperchénon dovresti usarloin temi oplugin. Ad ognimodo,seti troviin una situazione stranain cuinon hai opzionie devi usarequery_posts ()
,dovrestieseguirewp_reset_query ()
dopoil ciclo. Devi sapere che stai utilizzandoglobal $ wp_query
,che contiene la query originalefatta da WordPress,e quindiquery_post
che alteraglobal $ wp_query
variabile,si ottengono risultatiinaspettati. Inoltre,stai utilizzando unparametro obsoletoshowposts
,sostituito daposts_per_page
.Secondo :puoi utilizzare unmodello di ricercapersonalizzato (search.php)perpersonalizzare l'aspetto. Cerate semplicemente unfile search.phpnella cartella deltemae personalizzatelo come volete. Noneseguire querypersonalizzate qui ; se lofai,staifacendo unanuova queryperi poste sprecando la querygiàeseguita da WordPress. Uno spreco di risorse con unimpattonegativo sulleprestazioni.
Terzo :permodificarei parametri di querypredefiniti utilizzati da WordPress,comeilnumero dipostperpagina,ecc.,puoi utilizzare
pre_get_posts
azione .Quindi,crea unmodello di search.php come desiderie utilizza l'azione
pre_get_posts
per dire a WordPress qualiparametri desideri utilizzarenella query di ricerca:Ilmodello search.phppotrebbeessere qualcosa delgenere:
& lt;?php get_header (); global $ wp_query; ? > & lt; div class="wapper" > & lt; div class="contentarea clearfix" > & lt; div class="content" > & lt; h1 class="search-title" > & lt;?phpecho $ wp_query- >found_posts;? > & lt;?php _e ("Risultati di ricercatrovatiper","locale");? > ;: "& 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 ();? >" > Ulterioriinformazioni & lt;/a > & lt;/div > & lt;/li > & lt;?php}? > & lt;/ul > & lt;?phpechopaginate_links ();? > & lt;?php}? > & lt;/div > & lt;/div > & lt;/div > & lt;?phpget_footer ();? >
E l'azione
pre_get_posts
simile a questa:add_action ('pre_get_posts',function ($ query) { //Verificare che sia la query che si desideramodificare: query di ricercafront-end if ($ query- >is_main_query () & amp; & amp;!is_admin () & amp; & amp; $ query- >is_search ()) { //Modificai parametri della query $ 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 ); } } );
-
Non è davveronecessario usare `global $ wp_query` quandonel contesto delmodello,puoi semplicemente usare l'oggetto` $ wp_query` dovenecessario,maimmagino siameglioprevenire che curare :-)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
-
Nonne ero sicuro,quindi hoinclusoil riferimentoglobale.Grazieper lanota.I was not sure about that, so I included the global reference. Thanks for the note.
- 1
- 2015-05-11
- cybmeta
-
@cybmetagraziefunzionabene.grazie ancora.senonti dispiace allorapuoi dirmi come aggiungereilpaging?@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 quindipensi che siameglio sostituireglobal $ wp_query;a $ wp_query;@PieterGoosen so do you think i better replace global $wp_query; to $wp_query;
- 0
- 2015-05-11
- pagol001
-
Non hoincluso l'impaginazioneperchénon avevi l'impaginazionenel codice,ho solo copiatoiltuo codice senza laparte di querypersonalizzata.Èpossibile utilizzare una qualsiasi delle [funzionifornite da WordPressper l'impaginazione dipiùpost] (https://codex.wordpress.org/Pagination).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
-
No,puoi lasciarlo così com'è :-).No, you can leave it as is :-).
- 0
- 2015-05-12
- Pieter Goosen
-
- 2015-05-11
Devieseguireil ciclo,modificareiltuo search.phpin modo simile al codice sottostante
<?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(); ?>
-
Nel codice sopra,cambia "ventiquattro"nel dominio deltesto deltuotemaIn the above code change 'twentyfourteen' to your theme text domain
- 0
- 2015-05-11
- shuvroMithun
-
Grazie.semi daerrore Parseerror:errore di sintassi,fine imprevista delfilein .../search.php alla riga 34thanks. if giving me error Parse error: syntax error, unexpected end of file in .../search.php on line 34
- 0
- 2015-05-11
- pagol001
cosa hofatto,
creo un search.php
quindi crea un searchform.php
ma lamiapagina dei risultatinonmostra la descrizione del contenutoe mostra anche un solo risultato.ma sultitolo H1mostrailnumero 2/3/5/6/7ecc. Risultato della ricercatrovato. Vogliomostrare almeno 10 risultatie poi lapaginae mostrare ancheiltesto del contenuto di 200/300 caratteriperil risultato della ricerca.i ragazzipossono aiutarmi.non sono ancoraesperto di wp