Widget类中的Ajaxing函数

时间:2013-08-30 作者:Mohamed Badawy

我想在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\');
        }
    });
});

1 个回复
最合适的回答,由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.

结束

相关推荐

JQuery问题和wp_enQueue_脚本

实际上,我有一个主题,用于插入jquery代码和核心参考以及jquery iu总线发生了一些我不理解的事情,实际上正如我所说的,直到我需要插入代码来创建图像幻灯片,简单的幻灯片和流行的插件,这些插件在单页中工作非常完美为此,我创建了简单的快捷码并显示图像,然后将其移动到幻灯片中当我创建这个显示图像但不移动的快捷码时,我看到插件的代码是否加载到DOM中,我看到了完美的引用,并且在主题的头部和加载页面时也看到了对jquery核心的引用我看到一次又一次,滑块不起作用,最后我把jquery的参考远程代码放在了r