因此,我有一个HTML选择表单,允许用户选择2017年、2018年等年份
因此,我想要实现的是,当用户选择2017年时,2017年的帖子将加载到页面上。
我的过程是使用AJAX和WP\\U查询来实现这一点。
但是,我收到的错误是错误400错误请求。
因此,我们将非常感谢您提供的任何帮助。
Front end
<form action="<?php echo site_url()?>/wp-admin/admin-ajax.php" method="POST" id="filter>
<select id="year"></select>
</form>
JS ajax请求
$.ajax({
url : filter.attr(\'action\') ,
data : filter.serialize() ,
type : filter.attr(\'method\') ,
success : function (response)
{
console.log(response)
} ,
error : function (request , status , error)
{
console.log(request.responseText)
console.log(error)
} ,
headers: {
\'Content-type\': \'application/x-www-form-urlencoded\'
} ,
datatype : \'xml\'
}).done(function () {
console.log(\'ajax completed\')
})
functions.php
function filter_post_asb
{
$args = array(
\'cat\' => 43 ,
\'year\' => $_POST[\'year\']
);
$query = new WP_Query($args);
if ( $query -> have_posts()) :
?>
<div class="container">
<select id="year"></select>
<ul class="slides">
<?php while($query -> have_posts()) : $query -> the_post(); ?>
<li>
<img src="<?php bloginfo(\'template_url\')?>/images/logo.png" >
<?php the_content(); ?>
<h2><?php the_permalink();?></h2>
<h4><?php the_title();?></h4>
</li>
<li>
<?php the_post_thumbnail();?>
</li>
<?php endwhile ; ?>
<?php wp_reset_postdata();?>
</ul>
</div>
<?php
endif;
}
add_action(\'wp_ajax_filter\', \'filter_post_asb\');
add_action(\'wp_ajax_nopriv_filter\', \'filter_post_asb\');
再次感谢您提供的所有信息。
最合适的回答,由SO网友:Jaydip Nimavat 整理而成
尝试更改相应的代码:
Front end
<form action="<?php echo site_url()?>/wp-admin/admin-ajax.php" method="POST" id="filter>
<select name="year"></select>
<input type="hidden" name="action" value="filter" />
</form>
JS ajax请求
$.ajax({
url : filter.attr(\'action\') ,
data : filter.serialize() ,
type : filter.attr(\'method\') ,
success : function (response)
{
console.log(response)
},
error : function (request , status , error)
{
console.log(request.responseText)
console.log(error)
}
}).done(function () {
console.log(\'ajax completed\')
})
functions.php
function filter_post_asb {
ob_start()
$args = array(
\'cat\' => 43,
\'year\' => $_POST[\'year\']
);
$query = new WP_Query($args);
if ( $query -> have_posts()) : ?>
<div class="container">
<select id="year"></select>
<ul class="slides">
<?php while($query -> have_posts()) : $query -> the_post(); ?>
<li>
<img src="<?php bloginfo(\'template_url\')?>/images/logo.png" >
<?php the_content(); ?>
<h2><?php the_permalink();?></h2>
<h4><?php the_title();?></h4>
</li>
<li>
<?php the_post_thumbnail();?>
</li>
<?php endwhile ; ?>
<?php wp_reset_postdata();?>
</ul>
</div>
<?php
endif;
echo ob_get_clean();
// OR
// $html = ob_get_clean();
// echo json_encode( array( \'html\' => $html ) );
exit;
}
add_action(\'wp_ajax_filter\', \'filter_post_asb\');
add_action(\'wp_ajax_nopriv_filter\', \'filter_post_asb\');