Je rencontre un problème lors de la création d'une recherche ajax sur mes pages de publication uniques. Je dois limiter les résultats de la recherche aux types de messages personnalisés "fod_videos" et "post" et à la catégorie 12. Mon problème est que la recherche renvoie tous les messages sous ces filtres et ne prend pas la valeur de recherche. Je suppose que je manque quelque chose d'évident, mais je peux le comprendre. Voici ma configuration.
<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
la source
la source
Réponses:
Au lieu de
'cat' => 12
et$wp_query
utilisez'category_name' => slug
etget_posts()
.Voici un exemple de base de son fonctionnement:
PHP
Javascript
search.js
Restreindre la recherche
Au lieu de mon,
$this->render_search_results( $posts );
vous pouvez également charger un modèle à partir de votre thème et utiliser le$posts
tableau dans un résultat plus sophistiqué. :)la source
J'ai fait fonctionner le code d'origine, mais avec le type de message personnalisé (sans les catégories). Ajoutez une entrée masquée dans votre formulaire avec votre type de publication comme ceci:
la source