我想在Widget类的函数Widget中声明ajax函数,它有属于Widget的参数
add_action(\'wp_ajax_my_func\', \'my_func\');
add_action(\'wp_ajax_nopriv_my_func\', \'my_func\');
但当ajax调用它时,它什么也没有返回,我使用控制台。当我将函数移动到函数时,它返回0的数据响应日志。php it工作
可以在widget类中工作
我的小部件功能
public function widget( $args, $instance ) {
// outputs the content of the widget
extract( $args );
$title = $instance[\'title\'];
$number = $instance[\'number\'];
//ajax func.
function loadMoreP($number){
query_posts(\'showposts=\'.$number.\'\');
while(have_posts()) : the_post();
echo \'<li><a href="\'.get_permalink().\'">\'.get_the_title().\'</a>\'.the_post_thumbnail(\'thumbnail\').\'</li><br>\';
endwhile;
wp_reset_query();
die();
}
add_action(\'wp_ajax_loadMoreP\', array($this,\'loadMoreP\'));
add_action(\'wp_ajax_nopriv_loadMoreP\', array($this,\'loadMoreP\'));
echo $before_widget;
echo $before_title .$title.$after_title;
echo \'<ul class="LatestPosts">\';
echo \'</ul>\';
echo \'<br><br><input type="button" id="loadMoreW" value="Load More" data-offset="\'.$number.\'">\';
echo $after_widget;
}
还有ajax代码
$(\'#loadMoreW\').on(\'click\',function(){
$.ajax({
url: \'wp-admin/admin-ajax.php\',
type: \'POST\',
data: {
action : \'loadMoreP\',
offset: $(\'#loadMoreW\').data(\'offset\')
},
success: function(data){
console.log($(\'#loadMoreW\').data(\'offset\'));
console.log(data);
$(\'#loadMoreW\').data(\'offset\', $(\'#loadMoreW\').data(\'offset\')+2);
$(data).appendTo(\'.LatestPosts\');
}
});
});
最合适的回答,由SO网友:s_ha_dum 整理而成
如果这在widget类中,您需要。。。
add_action(\'wp_ajax_my_func\', array($this,\'my_func\'));
。。。不仅仅是。。。
add_action(\'wp_ajax_my_func\', \'my_func\');
然而,我怀疑由于您在其中使用的上下文,可能会有更多的问题。但是没有更多的代码,这就是我所拥有的。
根据问题中的新信息。。。
函数定义和add_action
代码嵌套在widget
小部件的方法。该方法仅在小部件显示在前端时运行,因此它内部的任何内容都不会针对AJAX请求执行。你需要从widget
方法,然后将其挂接到小部件的构造函数中,如下所示:
public function __construct() {
// other constructor stuff
add_action(\'wp_ajax_loadMoreP\', array($this,\'loadMoreP\'));
add_action(\'wp_ajax_nopriv_loadMoreP\', array($this,\'loadMoreP\'));
}
//ajax func.
public function loadMoreP($number){
query_posts(\'showposts=\'.$number.\'\');
while(have_posts()) : the_post();
echo \'<li><a href="\'.get_permalink().\'">\'.get_the_title().\'</a>\'.the_post_thumbnail(\'thumbnail\').\'</li><br>\';
endwhile;
wp_reset_query();
die();
}
这真的是伪代码。它完全未经测试,如果不适应特定的小部件,可能无法工作。
而且Please don\'t use query_posts
.