Non riesco a cercare nel mio custom post type
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( __( '« Post più vecchi', 'vigilance' )); ?></div>
<div class="alignright"><?php previous_posts_link( __( 'Post più recenti »', '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);

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)

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

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.

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ì

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.

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
