Non riesco a cercare nel mio custom post type

30 set 2011, 02:01:22
Visualizzazioni: 20.2K
Voti: 0

Ho aggiunto un nuovo custom post type chiamato: website_bookmarks

Ho intenzione di utilizzarlo come gestore dei segnalibri (esporterò tutti i miei segnalibri da Google Chrome nel mio custom post type) per i seguenti motivi

  • Posso cercare facilmente i segnalibri
  • Posso aggiungere tag (php, web design, ecc...)
  • Posso aggiungere descrizioni per spiegare meglio il segnalibro
  • Posso visualizzare e ordinare come preferisco
  • Posso accedere da qualsiasi luogo online
  • Posso condividere i miei segnalibri con i lettori (avrò l'opzione per contrassegnare un segnalibro come Privato o Pubblico così posso essere l'unico a vedere quelli Privati)
  • Ci sono sicuramente altri motivi che rendono questa una buona idea

Ora il mio unico problema finora è la parte della ricerca. Non riesco a far cercare al mio WordPress (ultima versione) nulla nel post type website_bookmarks.

Ho modificato il mio modulo di ricerca con un campo nascosto

<input type="hidden" name="post_type" value="website_bookmarks" />

Quindi nella mia pagina di ricerca nell'URI vedrò...

www.mydomain.com/?s=terminericerca&post_type=website_bookmarks

Il problema è che mostra SOLO risultati di ricerca per i miei post del blog normali e nessun risultato dal mio custom post type.

Se rimuovo s=terminericerca dall'URI così che diventi

www.mydomain.com/?post_type=website_bookmarks

allora mostrerà TUTTI i post del mio custom post type. Questo dimostra che website_bookmarks è il nome corretto per il mio post type, solo la parte della ricerca non funziona correttamente. Restituirà risultati di ricerca dai post normali senza problemi, ma nessuno dal mio post type website_bookmarks

Non dovrebbe mostrare alcun risultato per i miei post del blog e SOLO risultati per il mio custom post type website_bookmarks

Qualcuno può aiutarmi? Non riesco a capire perché non funziona, il codice che mostro sopra per modificare il modulo di ricerca, l'ho trovato online da altri che dicevano che funzionava per i loro blog semplicemente modificando il modulo di ricerca come ho fatto io sopra.

Di seguito c'è il mio file search.php completo

<?php get_header(); ?>
<?php if (have_posts()) : ?>
    <h1 class="pagetitle"><?php printf( __("Risultati della ricerca per <span>%s</span>", "vigilance"), get_search_query()); ?></h1>
    <img class="archive-comment" src="<?php echo get_template_directory_uri(); ?>/images/comments-bubble-archive.gif" width="17" height="14" alt="Commenti" title="Icona commenti"/>
    <div class="entries">
        <ul>
        <?php while (have_posts()) : the_post(); ?>
            <li><a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php esc_attr( sprintf( __( 'Link permanente a %s', 'vigilance' ), the_title_attribute( 'echo=false' ) ) ); ?>"><span class="comments_number"><?php comments_number( '0', '1', '%', '' ); ?></span><span class="archdate"><?php the_time( __( 'M.j.y', 'vigilance' )); ?></span><?php the_title(); ?></a></li>
        <?php endwhile; /* riavvolgi o continua se tutti i post sono stati recuperati */ ?>
        </ul>
    </div><!--fine entries-->
    <div class="navigation">
        <div class="alignleft"><?php next_posts_link( __( '&laquo; Post più vecchi', 'vigilance' )); ?></div>
        <div class="alignright"><?php previous_posts_link( __( 'Post più recenti &raquo;', 'vigilance' )); ?></div>
    </div><!--fine navigation-->
<?php else : ?>
    <h1 class="pagetitle"><?php printf( __("Risultati della ricerca per '%s'", "vigilance"), get_search_query()); ?></h1>
    <div class="entry">
        <p><?php printf( __( 'Spiacenti, la tua ricerca per "%s" non ha prodotto risultati. Riprova.', 'vigilance' ), get_search_query());?></p>
        <?php get_search_form(); ?>
    </div><!--fine entry-->
<?php endif; ?>
</div><!--fine content-->
<?php get_sidebar(); ?>
<?php get_footer(); ?>

Ho anche provato a usare questo codice nel mio file functions.php senza successo...

function mySearchFilter($query) {
    $post_type = $_GET['post_type'];
    if (!$post_type) {
        $post_type = 'any';
    }
    if ($query->is_search) {
        $query->set('post_type', $post_type);
    };
    return $query;
};
add_filter('pre_get_posts','mySearchFilter');

Di seguito è riportato il mio codice utilizzato per creare il post type website_bookmarks, puoi vedere che ho abilitato query_var e publicly_queryable e ho impostato exclude_from_search sia su true che false per testarlo in entrambi i modi, senza successo

$bookmark_args = array(
        'labels' => $bookmark_labels,
        'public' => true,
        'publicly_queryable' => true,
        'exclude_from_search' => true,
        'show_ui' => true,
        'show_in_menu' => true,
        'query_var' => true,
        'rewrite' => array(
            'slug' => 'bookmark',
            'with_front' => false),
        'taxonomies' => array('bookmark_tags'),
        'capability_type' => 'post',
        'has_archive' => true,
        'hierarchical' => false,
        'menu_position' => 4,
        'can_export' => true,
        'supports' => array(
            'thumbnail', //miniatura sito web
            'excerpt', //descrizione sito web
            'title', //titolo sito web
            'custom-fields',
            'comments'
        )
    );   
    register_post_type('website_bookmarks', $bookmark_args);
0
Tutte le risposte alla domanda 3
4

hai provato if (!isset($post_type)) o if(empty($post_type))?? Ad esempio, proverei questo:

    function mySearchFilter($query) {
    $post_type = $_GET['post_type'];

    if ($query->is_search) {
        if (!empty($post_type)) {
           $query->set('post_type', $post_type);
    }
  }
    return $query;
}

add_filter('pre_get_posts','mySearchFilter');

MODIFICA: Ecco il mio codice di esempio funzionante:

Ecco il mio CPT utilizzato per il test:

add_action( 'init', 'register_cpt_website_bookmarks' );
function register_cpt_website_bookmarks() {
$labels = array(
'name' => _x( 'Segnalibri', 'website_bookmarks' ),
'singular_name' => _x( 'Segnalibro', 'website_bookmarks' ),
'add_new' => _x( 'Aggiungi nuovo', 'website_bookmarks' ),
'add_new_item' => _x( 'Aggiungi nuovo segnalibro', 'website_bookmarks' ),
'edit_item' => _x( 'Modifica segnalibro', 'website_bookmarks' ),
'new_item' => _x( 'Nuovo segnalibro', 'website_bookmarks' ),
'view_item' => _x( 'Visualizza segnalibro', 'website_bookmarks' ),
'search_items' => _x( 'Cerca segnalibri', 'website_bookmarks' ),
'not_found' => _x( 'Nessun segnalibro trovato', 'website_bookmarks' ),
'not_found_in_trash' => _x( 'Nessun segnalibro trovato nel cestino', 'website_bookmarks' ),
'parent_item_colon' => _x( 'Segnalibro genitore:', 'website_bookmarks' ),
'menu_name' => _x( 'Segnalibri', 'website_bookmarks' ),
);
$args = array(
'labels' => $labels,
'hierarchical' => false,
'supports' => array( 'title', 'editor' ),
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => false,
'publicly_queryable' => true,
'exclude_from_search' => false,
'has_archive' => true,
'query_var' => true,
'can_export' => true,
'rewrite' => true,
'capability_type' => 'post'
);
register_post_type( 'website_bookmarks', $args );
} 

Link: [link rimosso] (cerca "Segnalibro" o "Test" e se rimuovi il "post_type" e cerchi "test" otterrai più risultati)

30 set 2011 02:27:03
Commenti

Ciao, sì ho provato qualcosa di simile e ho appena provato questo, ma ancora nessun risultato

JasonDavis JasonDavis
30 set 2011 03:12:14

Deve esserci qualcosa che non va con il tuo post type. Ho usato il codice sopra e modificato la mia barra di ricerca e funziona perfettamente. Ho fatto il test su wp 3.3, non so quale versione tu stia usando.

Brooke. Brooke.
30 set 2011 22:16:23

L'ho appena provato su un tema diverso e funziona, però non sul mio tema, quindi QUALCOSA deve interferire con il mio tema impedendogli di funzionare, grazie per il test, non avrei mai pensato di controllare se fosse solo un tema a non funzionare e un altro sì

JasonDavis JasonDavis
1 ott 2011 01:27:16

Guarderei altri pre_get_posts nel tuo tema o altri elementi che potrebbero interromperlo

Brooke. Brooke.
1 ott 2011 09:25:53
1

prima di tutto, l'impostazione

'exclude_from_search' => true,

escluderà il CPT dai risultati di ricerca. Deve essere impostato su false. Il CPT Generator di Themergency ti sarà utile per scrivere rapidamente i tuoi CPT.

Per includere i CPT negli archivi o nelle ricerche di solito uso questo codice, che è leggermente diverso dal tuo:

function include_custom_post_types( $query ) {
    $custom_post_type = get_query_var( 'post_type' );

    if ( is_archive() ) {
        if ( empty( $custom_post_type ) ) $query->set( 'post_type' , get_post_types() );
    }

    if ( is_search() ) {
        if ( empty( $custom_post_type ) ) {
            $query->set( 'post_type' , array(
                'post', 'page', 'yourcpt'
                )
            );
        }
    }

    return $query;
}
add_filter( 'pre_get_posts' , 'include_custom_post_types' );

Spero che funzioni per te.

30 set 2011 02:28:21
Commenti

Ciao, ho cambiato in 'exclude_from_search' => true, solo per testare, ora è di nuovo impostato su false ma questo non fa differenza per il mio problema. Grazie per il link al CPT Generator, è molto utile! Ho provato il tuo codice sopra, cambiando 'post', 'page', 'yourcpt' in 'post', 'page', 'website_bookmarks' tuttavia, i miei risultati di ricerca non mostrano ancora alcun risultato dal mio CPT website_bookmarks, è davvero strano per me che nulla funzioni

JasonDavis JasonDavis
30 set 2011 03:46:19
0

Forse

'exclude_from_search' => false

e

e ri-salva i permalink per svuotare la cache

22 set 2017 23:14:23