Ich habe ein Problem beim Erstellen einer Ajax-Suche auf meinen einzelnen Postseiten. Ich muss die Suchergebnisse auf die benutzerdefinierten Beitragstypen "fod_videos" und "post" und Kategorie 12 beschränken. Mein Problem ist, dass bei der Suche alle Beiträge unter diesen Filtern zurückgegeben werden und der Suchwert nicht verwendet wird. Ich vermute, ich vermisse etwas Offensichtliches, aber ich kann es herausfinden. Hier ist mein Setup.
<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
quelle
quelle
Antworten:
Anstelle von
'cat' => 12
und$wp_query
verwenden'category_name' => slug
undget_posts()
.Hier ist ein grundlegendes Beispiel, wie es funktioniert:
PHP
JavaScript
search.js
Suche einschränken
Anstelle meiner können
$this->render_search_results( $posts );
Sie auch eine Vorlage aus Ihrem Thema laden und das$posts
Array in einem komplexeren Ergebnis verwenden. :) :)quelle
Ich habe den Originalcode zum Laufen gebracht, aber mit dem benutzerdefinierten Beitragstyp (ohne die Kategorien). Fügen Sie Ihrem Formular eine versteckte Eingabe mit Ihrem Beitragstyp wie folgt hinzu:
quelle