[英]Wordpress ajax WP_Query
我正在尝试使用变量通过ajax加载帖子以按年份获取帖子。 我发现了这个很棒的教程https://www.creare.co.uk/blog/simple-wp_query-ajax ,我正在尝试根据自己的需要进行修改,但是我对Ajax的使用经验为0,而对jquery的了解却不多...
这是我修改过的代码,但是还没有过一年,我也不知道该怎么做,我非常感谢您的帮助
js
//If input is changed, load posts
$('#genre-filter input').live('change', function(){
genre_get_posts(); //Load Posts
});
//Find Selected Genres
function getSelectedGenres()
{
var genres = [];
$("#genre-filter div").click(function() {
var genres = $(this).attr('value');
console.log(genres);
});
return genres;
}
//Main ajax function
function genre_get_posts(paged)
{
var ajax_url = ajax_genre_params.ajax_url;
$.ajax({
type: 'GET',
url: ajax_url,
data: {
action: 'genre_filter',
genres: getSelectedGenres,
},
beforeSend: function ()
{
//Show loader here
},
success: function(data)
{
//Hide loader here
$('#genre-results').html(data);
},
error: function()
{
$("#genre-results").html('<p>There has been an error</p>');
}
});
}
模板
<section id="primary" class="content-area">
<div id="content" class="site-content" role="main">
<?php
if ( have_posts() ):
while ( have_posts() ): the_post();
get_template_part( 'content' );
endwhile;
endif;
?>
<div class="entry-content">
<div id="genre-filter">
<div id="2018" value="2018" name="filter_genre[]">2018</div>
<div id="2017" value="2017" name="filter_genre[]">2017</div>
</div>
<div id="genre-results"></div>
</div>
</div>
functions.php
function ajax_genre_filter() {
$query_data = $_GET;
$genre_terms = ( $query_data[ 'genres' ] ) ? explode( ',', $query_data[ 'genres' ] ) : false;
$book_args = array(
'post_type' => 'book',
'posts_per_page' => 2,
'year' => $genre_terms,
);
$book_loop = new WP_Query( $book_args );
if ( $book_loop->have_posts() ):
while ( $book_loop->have_posts() ): $book_loop->the_post();
get_template_part( 'content' );
endwhile;
echo $query_data;
else :
get_template_part( 'content-none' );
endif;
wp_reset_postdata();
die();
}
您的第一个问题是getSelectedGenres
变量作用域。 我想像一下,由于事件处理程序中的第二个var
,您总是得到一个空数组。 请尝试下面的修改版本。
function getSelectedGenres()
{
var genres = [];
$("#genre-filter div").click(function() {
var g = $(this).attr('value');
genres.push(g);
console.log(g);
});
return genres;
}
另外,看起来ajax_genre_filter
基于映射'year' => $genre_terms
从类型查询字符串genres
读取年份,因此请尝试在函数getSelectedGenres
包括所选年份。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.