Come posso rimuovere le Pagine dalla ricerca?
Ecco il codice da aggiungere al file functions.php del tuo tema per escludere le Pagine dalla ricerca del sito:
function exclude_pages_from_search($query) {
if ($query->is_search && !is_admin()) {
$query->set('post_type', 'post');
}
return $query;
}
add_filter('pre_get_posts', 'exclude_pages_from_search');
Con questo codice, quando qualcuno effettua una ricerca sul tuo sito, verranno mostrati solo i Post nei risultati. Le Pagine verranno escluse automaticamente.

Grazie mille. Ho semplicemente copiato e incollato e funziona perfettamente

Esiste un modo per nascondere pagine specifiche invece di tutte le pagine?

Il seguente codice in functions.php funziona altrettanto bene:
//Rimuove le pagine dai risultati di ricerca
function mySearchFilter($query) {
if ($query->is_search) {
$query->set('post_type', 'post');
}
return $query;
}
add_filter('pre_get_posts','mySearchFilter');

dovrebbe essere la soluzione. più elegante, più mantenibile. quanto sopra modifica solo i parametri del post type, questo modifica direttamente la query di ricerca. +1

Modificare l'oggetto post type per il tipo 'page' è una soluzione migliore. Questa soluzione forza il post type ad essere impostato come 'post' per tutte le query di ricerca, il che impedirebbe a qualsiasi custom post type di apparire nei risultati di ricerca se un sito li avesse. Impostare globalmente la proprietà exclude_from_search dell'oggetto post type 'page' significa che qualsiasi codice che dipende dal controllare questa proprietà avrà le informazioni corrette.

Link parzialmente rilevante con qualche informazione in più: http://codex.wordpress.org/Post_Types#Custom_Post_Types_in_the_main_Query

Ecco il codice per rimuovere pagine specifiche dai risultati di ricerca in WordPress, aggiungi il seguente codice nel file function.php Sostituisci semplicemente l'array con gli ID delle tue pagine
function remove_pages_from_search($query) {
if ( !is_admin() && $query->is_main_query() ) {
if ($query->is_search) {
$query->set('post__not_in', array(3031,2958,2926));
}
}
}
add_action('pre_get_posts','remove_pages_from_search');

inserisci questo nel tuo search.php
<?php if (is_search() && ($post->post_type=='page')) continue; ?>
subito sotto questo codice -> <?php if ( have_posts() ) : while ( have_posts() ) : the_post();?>
puoi trovare maggiori informazioni qui http://wordpress.org/support/topic/possible-search-only-posts-exclude-pages

Non ho un search.php, se ne prendo uno da un altro tema funzionerà? Grazie

sì. prima crea un search.php vuoto poi copia e incolla il codice da index.php. poi fai quello che ti ho detto sopra.

Questa soluzione segue (rispetta) l'API di WP piuttosto che modificare direttamente le variabili interne.
Nota che in questo modo puoi anche includere (sovrascrivere la registrazione) tipi o modificare gli argomenti di registrazione forniti in register_post_type()
. Consulta la descrizione di 'exclude_from_search'
nella documentazione.
/**
* Filtra i tipi di oggetto nei risultati di ricerca.
*
* @param array $args Array di argomenti per la registrazione di un post type.
* Vedi la funzione register_post_type() per gli argomenti accettati.
* @param string $type Chiave del tipo di post (oggetto) (es. 'post', 'page', 'attachment'...,
* o qualsiasi custom post type registrato).
* @return array Attributi del tipo filtrato.
*/
function _filter_search_types( $args, $type ) {
$exclude_types = array( 'page' );
if ( in_array( $type, $exclude_types, true ) ) {
$args['exclude_from_search'] = true;
}
return $args;
}
if ( ! is_admin() ) {
add_filter( 'register_post_type_args', __NAMESPACE__ . '\_filter_search_types', 10, 2 );
}

@Rup - Ho parlato della WP API, non della WP REST API (che qui è irrilevante). E questa non è una "alternativa" alla risposta accettata ma "il modo corretto", poiché la "risposta accettata" non segue la WP API e come qualsiasi modifica diretta delle variabili dovrebbe essere considerata un hack piuttosto che una soluzione.

@Rup - E hai ragione - comment
non è un post type (corretto).
