Tengo un problema al crear una búsqueda ajax en mis páginas de publicaciones individuales. Necesito limitar los resultados de búsqueda a los tipos de publicación personalizados "fod_videos" y "post" y categoría 12. Mi problema es que la búsqueda devuelve todas las publicaciones bajo esos filtros y no toma el valor de búsqueda. Supongo que me estoy perdiendo algo obvio, pero puedo resolverlo. Aquí está mi configuración.
<div class="panel">
<h2>Search Videos</h2>
<div id="my-search">
<form role="search" method="get" id="searchform" action="http://myurl.com/" >
<input type="text" value="" name="s" id="s" />
<input type="submit" id="searchsubmit" value="Search" />
</form>
</div>
</div>
add_action('wp_ajax_wpa5000_search', 'wpa5000_search');
add_action('wp_ajax_nopriv_wpa5000_search', 'wpa5000_search');
function wpa5000_search(){
global $wp_query;
$search = $_POST['search_val'];
$args = array(
's' => $search,
'posts_per_page' => 10,
'cat' => 12,
'post_type' => array( 'post','fod_videos' )
);
$wp_query = new WP_Query( $args );
get_template_part( 'video-search-results' );
exit;
}
add_action( 'wp_enqueue_scripts', 'wpa56343_scripts', 100 );
function wpa56343_scripts() {
wp_enqueue_script(
'wpa56343_script',
get_template_directory_uri() . '/libs/search.js?ver=1.0',
array( 'jquery' ),
null,
false
);
wp_localize_script(
'wpa56343_script',
'WPaAjax',
array(
'ajaxurl' => admin_url( 'admin-ajax.php' )
)
);
}
// search.php
$(document).ready(function($){
$('#searchsubmit').click(function(e){
var $panel = $(this).closest(".panel");
$panel.empty();
e.preventDefault();
var search_val=$("#s").val();
$.post(
WPaAjax.ajaxurl,
{
action : 'wpa5000_search',
search_val : search_val
},
function( response ) {
$panel.append( response );
}
);
});
});
//video-search-results.php
<?php
while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
//STUFF
<?php endwhile; ?>
custom-post-types
wp-query
search
ajax
Pollux Khafra
fuente
fuente
Respuestas:
En lugar de
'cat' => 12
y$wp_query
el uso'category_name' => slug
yget_posts()
.Aquí hay un ejemplo básico de cómo funciona:
PHP
JavaScript
search.js
Restringiendo la búsqueda
En lugar de mi
$this->render_search_results( $posts );
, también puede cargar una plantilla de su tema y usar la$posts
matriz en un resultado más sofisticado. :)fuente
Obtuve el código original funcionando, pero con el tipo de publicación personalizada (sin las categorías). Agregue una entrada oculta en su formulario con su tipo de publicación de esta manera:
fuente