Estou com um problema ao criar uma pesquisa ajax em minhas páginas de postagem únicas. Preciso limitar os resultados da pesquisa aos tipos de postagem personalizados "fod_videos" e "post" e categoria 12. Meu problema é que a pesquisa está retornando todas as postagens nesses filtros e não levando o valor da pesquisa. Acho que estou perdendo algo óbvio, mas não consigo entender. Aqui está a minha configuração.
<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
fonte
fonte
Respostas:
Em vez de
'cat' => 12
e$wp_query
use'category_name' => slug
eget_posts()
.Aqui está um exemplo básico de como funciona:
PHP
Javascript
search.js
Restringindo a pesquisa
Em vez do meu,
$this->render_search_results( $posts );
você também pode carregar um modelo do seu tema e usar a$posts
matriz em um resultado mais sofisticado. :)fonte
Coloquei o código original funcionando, mas com o tipo de postagem personalizada (sem as categorias). Adicione uma entrada oculta no seu formulário com o seu tipo de postagem como este:
fonte