Pagina dei risultati di ricerca personalizzata
quello che ho fatto,
ho creato un search.php
<?php get_header(); ?>
<div class="wapper">
<div class="contentarea clearfix">
<div class="content">
<h1 class="search-title"> <?php echo $wp_query->found_posts; ?>
<?php _e( 'Risultati di ricerca trovati per', 'locale' ); ?>: "<?php the_search_query(); ?>" </h1>
<ul>
<?php query_posts('showposts=3'); if (have_posts()) : ?>
<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(); ?>">Leggi di più</a></div>
</li>
<?php endif ?>
</ul>
</div>
</div>
</div>
<?php get_footer(); ?>
poi ho creato un searchform.php
<form action="<?php bloginfo('siteurl'); ?>" id="searchform" method="get">
<input type="search" id="searchbox" name="s" placeholder="Inserisci parole chiave" required>
<input type="image" id="searchsubmit" alt="Cerca" class="searchicon" src="<?php bloginfo( 'template_url' ); ?>/images/icon-search.gif" />
</form>
ma la mia pagina dei risultati non mostra la descrizione del contenuto e mostra solo un risultato. Tuttavia nel titolo H1 mostra 2/3/5/6/7 ecc numero di risultati trovati. Vorrei mostrare almeno 10 risultati per pagina e poi la paginazione, e anche mostrare 200/300 caratteri di testo del contenuto per ogni risultato di ricerca. Ragazzi potete aiutarmi, non sono ancora un esperto di WordPress.

Ho alcune raccomandazioni per la tua domanda:
Primo: smetti di usare query_posts()
. Vedi la codex su questa funzione per capire perché non dovresti usarla nei temi o plugin. Comunque, se ti trovi in una situazione particolare dove non hai alternative e devi usare query_posts()
, dovresti eseguire wp_reset_query()
dopo il loop. Devi sapere che stai usando global $wp_query
, che contiene la query originale fatta da WordPress, e poi query_post
altera la variabile global $wp_query
, ottenendo risultati inaspettati. Inoltre, stai usando un parametro deprecato showposts
, sostituito da posts_per_page
.
Secondo: puoi usare un template di ricerca personalizzato (search.php) per personalizzare l'aspetto. Basta creare un file search.php nella cartella del tuo tema e personalizzarlo come preferisci. Non fare query personalizzate qui; se lo fai, stai creando una nuova query per i post e sprechi la query già fatta da WordPress. Uno spreco di risorse con impatto negativo sulle prestazioni.
Terzo: per modificare i parametri di query predefiniti usati da WordPress, come il numero di post per pagina, ecc., puoi usare l'azione pre_get_posts
.
Quindi, crea il tuo template search.php come preferisci e usa l'azione pre_get_posts
per dire a WordPress quali parametri vuoi usare nella query di ricerca:
Il template search.php potrebbe essere qualcosa come questo:
<?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( 'Risultati della ricerca trovati per', '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(); ?>">Leggi di più</a></div>
</li>
<?php } ?>
</ul>
<?php echo paginate_links(); ?>
<?php } ?>
</div>
</div>
</div>
<?php get_footer(); ?>
E l'azione pre_get_posts
potrebbe essere qualcosa come questo:
add_action( 'pre_get_posts', function( $query ) {
// Verifica che sia la query che vogliamo modificare: query di ricerca front-end
if( $query->is_main_query() && ! is_admin() && $query->is_search() ) {
// Modifica i parametri della query
$query->set( 'posts_per_page', 3 );
}
} );

Non è davvero necessario usare global $wp_query
quando sei nel contesto del template, puoi semplicemente usare l'oggetto $wp_query
dove necessario, ma immagino che sia meglio prevenire che curare :-)

Non ero sicuro di questo, quindi ho incluso il riferimento globale. Grazie per la nota.

@cybmeta grazie, funziona benissimo. Grazie ancora. Se non ti dispiace, potresti dirmi come aggiungere l'impaginazione?

@PieterGoosen quindi pensi che sia meglio sostituire global $wp_query; con $wp_query;

Non ho incluso la paginazione perché non c'era nel tuo codice, ho semplicemente copiato il tuo codice senza la parte della query personalizzata. Puoi usare una qualsiasi delle funzioni fornite da WordPress per la paginazione di articoli multipli.

Devi eseguire il loop, modifica il tuo search.php in modo simile al codice qui sotto
<?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( __( 'Risultati della ricerca per: %s', 'twentyfourteen' ), get_search_query() ); ?></p>
</header><!-- .page-header -->
<?php
// Inizia il 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(); ?>">Leggi tutto</a>
</div>
<?php
endwhile;
else :
// Se non ci sono contenuti, includi il template "Nessun post trovato"
get_template_part( 'content', 'none' );
endif;
?>
</ul>
</div>
</div>
</div>
<?php get_footer(); ?>
