¿No puedo buscar en mi tipo de entrada personalizada?
He añadido un nuevo tipo de entrada personalizada llamado: website_bookmarks
Planeo usarlo como mi gestor de marcadores (voy a exportar todos mis marcadores de Google Chrome a mi tipo de entrada personalizada) por las siguientes razones
- Puedo buscar marcadores fácilmente
- Puedo añadir etiquetas (php, diseño web, etc...)
- Puedo añadir descripciones para explicar mejor el marcador
- Puedo ver y ordenar como yo elija
- Puedo acceder desde cualquier lugar online
- Puedo compartir mis marcadores con mis lectores (tendré la opción de marcar un marcador como Privado o Público para que solo yo pueda ver los Privados)
- Seguramente hay otras razones que hacen que sea una buena idea
Ahora mi único problema hasta ahora es la parte de búsqueda. No puedo hacer que mi wordpress (última versión) busque en el tipo de entrada website_bookmarks.
He modificado mi formulario de búsqueda con un campo oculto
<input type="hidden" name="post_type" value="website_bookmarks" />
Así que en mi página de búsqueda en la URI veré...
www.mydomain.com/?s=mitermino&post_type=website_bookmarks
El problema es que SOLO muestra resultados de búsqueda de mis entradas regulares del blog y ningún resultado de mi tipo de entrada personalizada.
Si elimino el s=mitermino
de la URI quedando así
www.mydomain.com/?post_type=website_bookmarks
entonces mostrará TODAS las entradas de mi tipo de entrada personalizada. Esto demuestra que website_bookmarks es el nombre correcto para mi tipo de entrada, solo que la parte de búsqueda no está funcionando correctamente. Devolverá resultados de búsqueda de entradas regulares sin problema, pero ninguno de mi tipo de entrada website_bookmarks
No debería mostrar ningún resultado de mis entradas del blog y SOLO resultados de mi tipo de entrada personalizada website_bookmarks
¿Puede alguien ayudarme? No puedo entender por qué no funciona, el código que muestro arriba para modificar el formulario de búsqueda, lo encontré en línea de otros que decían que funcionaba en sus blogs simplemente cambiando el formulario de búsqueda a lo que hice arriba.
A continuación está mi archivo search.php completo
<?php get_header(); ?>
<?php if (have_posts()) : ?>
<h1 class="pagetitle"><?php printf( __("Resultados de búsqueda para <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="Comentarios"/>
<div class="entries">
<ul>
<?php while (have_posts()) : the_post(); ?>
<li><a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php esc_attr( sprintf( __( 'Enlace 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; /* rewind or continue if all posts have been fetched */ ?>
</ul>
</div><!--end entries-->
<div class="navigation">
<div class="alignleft"><?php next_posts_link( __( '« Entradas Anteriores', 'vigilance' )); ?></div>
<div class="alignright"><?php previous_posts_link( __( 'Entradas Nuevas »', 'vigilance' )); ?></div>
</div><!--end navigation-->
<?php else : ?>
<h1 class="pagetitle"><?php printf( __("Resultados de búsqueda para '%s'", "vigilance"), get_search_query()); ?></h1>
<div class="entry">
<p><?php printf( __( 'Lo sentimos, tu búsqueda de "%s" no arrojó resultados. Por favor, intenta de nuevo.', 'vigilance' ), get_search_query());?></p>
<?php get_search_form(); ?>
</div><!--end entry-->
<?php endif; ?>
</div><!--end content-->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Incluso he intentado usar este código en mi archivo functions.php sin éxito...
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');
A continuación está mi código usado para crear el tipo de entrada website_bookmarks, pueden ver que he habilitado query_var y publicly_queryable y he establecido exclude_from_search en true y false para probarlo de ambas formas, sin éxito
$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 del sitio web
'excerpt', //descripción del sitio web
'title', //título del sitio web
'custom-fields',
'comments'
)
);
register_post_type('website_bookmarks', $bookmark_args);

¿Probaste if (!isset($post_type))
o if(empty($post_type))
?? Por ejemplo, yo intentaría esto:
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');
EDITADO: Aquí está mi código de ejemplo funcional:
Aquí está mi CPT (Tipo de Post Personalizado) usado para pruebas:
add_action( 'init', 'register_cpt_website_bookmarks' );
function register_cpt_website_bookmarks() {
$labels = array(
'name' => _x( 'Bookmarks', 'website_bookmarks' ),
'singular_name' => _x( 'Bookmark', 'website_bookmarks' ),
'add_new' => _x( 'Añadir nuevo', 'website_bookmarks' ),
'add_new_item' => _x( 'Añadir nuevo Bookmark', 'website_bookmarks' ),
'edit_item' => _x( 'Editar Bookmark', 'website_bookmarks' ),
'new_item' => _x( 'Nuevo Bookmark', 'website_bookmarks' ),
'view_item' => _x( 'Ver Bookmark', 'website_bookmarks' ),
'search_items' => _x( 'Buscar Bookmarks', 'website_bookmarks' ),
'not_found' => _x( 'No se encontraron bookmarks', 'website_bookmarks' ),
'not_found_in_trash' => _x( 'No hay bookmarks en la papelera', 'website_bookmarks' ),
'parent_item_colon' => _x( 'Bookmark superior:', 'website_bookmarks' ),
'menu_name' => _x( 'Bookmarks', '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 );
}
Enlace: [enlace eliminado] (busca "Bookmark" o "Test" y si eliminas el "post_type" y buscas "test" obtendrás más resultados)

Hola, sí he probado algo similar y acabo de intentar esto, pero todavía no tengo suerte

Debe haber algo mal con tu tipo de publicación. Usé el código anterior y modifiqué mi barra de búsqueda y funciona genial. Hice mi prueba en WP 3.3, no estoy seguro de qué versión estás usando.

Acabo de probarlo en un tema diferente, funciona, pero no en mi tema, así que ALGO debe estar interfiriendo en mi tema para que no funcione. Gracias por la prueba, nunca hubiera pensado en verificar si era solo un tema u otro el que no funcionaba

en primer lugar, configurar
'exclude_from_search' => true,
excluirá el CPT de los resultados de búsqueda. Debe establecerse en false. El Generador de CPT de Themergency te será útil para crear rápidamente tus CPTs.
Para incluir CPTs en archivos o búsquedas, normalmente uso esto, que es ligeramente diferente al tuyo:
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', 'tucpt'
)
);
}
}
return $query;
}
add_filter( 'pre_get_posts' , 'include_custom_post_types' );
Espero que esto te funcione.

Hola, había cambiado a esto 'exclude_from_search' => true,
solo para probar, ahora está configurado en false nuevamente pero eso no hace diferencia en mi problema. Gracias por el enlace al Generador de CPT, ¡es genial! Probé tu código anterior, cambié 'post', 'page', 'yourcpt'
por 'post', 'page', 'website_bookmarks'
, sin embargo, mis resultados de búsqueda aún no muestran ningún resultado de mi CPT website_bookmarks, me parece muy extraño que nada funcione
