Come posso rimuovere le Pagine dalla ricerca?

16 dic 2010, 03:01:47
Visualizzazioni: 21.8K
Voti: 18

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.

0
Tutte le risposte alla domanda 5
5
37

Il seguente codice dovrebbe rimuovere il tipo di post "pagina" dai risultati di ricerca.

function remove_pages_from_search() {
    global $wp_post_types;
    $wp_post_types['page']->exclude_from_search = true;
}
add_action('init', 'remove_pages_from_search');
16 dic 2010 04:23:36
Commenti

Dove devo inserire quel codice? Grazie

User User
16 dic 2010 05:09:22

Puoi inserirlo nel file functions.php del tuo tema.

prettyboymp prettyboymp
16 dic 2010 05:18:38

Grazie mille. Ho semplicemente copiato e incollato e funziona perfettamente

User User
18 dic 2010 22:14:25

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

user9437856 user9437856
18 ott 2021 14:19:39

Questa idea non segue l'API di WP e come qualsiasi modifica diretta alle variabili dovrebbe essere considerata un hack piuttosto che una soluzione.

Krzysztof Przygoda Krzysztof Przygoda
21 ott 2021 00:26:59
4
14

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');
16 dic 2010 07:18:41
Commenti

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

kaiser kaiser
4 feb 2011 11:37:05

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.

prettyboymp prettyboymp
23 gen 2012 20:44:37

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

its_me its_me
27 feb 2013 07:57:19

Funziona bene ma non mostra l'argomento in bbpress, quindi non è buono. Usare "$wp_post_types['page']->exclude_from_search = true;" sembra una buona opzione

Kishore Sahoo Kishore Sahoo
24 lug 2015 16:27:12
1

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');
7 lug 2021 18:01:04
Commenti

Funziona per me. Grazie e un voto positivo da parte mia

user9437856 user9437856
18 ott 2021 14:35:35
3

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

16 dic 2010 04:00:37
Commenti

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

User User
16 dic 2010 05:10:31

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

andrewk andrewk
16 dic 2010 07:33:38

in realtà dovresti usare il codice di @prettyboymp. è più semplice e fa quello che hai chiesto. l'ho testato. se vuoi..

andrewk andrewk
16 dic 2010 07:38:31
3

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 );
}
21 ott 2021 00:15:49
Commenti

@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.

Krzysztof Przygoda Krzysztof Przygoda
21 ott 2021 01:51:51

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

Krzysztof Przygoda Krzysztof Przygoda
21 ott 2021 01:59:54

Sì, ho frainteso, scusa

Rup Rup
21 ott 2021 12:36:48