使用wp_ajax和wp_ajax_nopriv挂接

时间:2013-11-03 作者:enam

我想发送一个ajax请求,如果用户登录,我想处理它。因此,我想使用以下两个挂钩,但我不确定是否正确使用了它们。

使用相同的功能是否正确take_action_function 对于两个挂钩,然后检查该功能是否用户已登录?或者我应该创建two different functions, 一个用于执行操作,另一个仅用于返回用户应登录的消息?

add_action(\'wp_ajax_nopriv_test-action\', \'take_action_function\');
add_action(\'wp_ajax_test-action\', \'take_action_function\');

function take_action_function(){
    if ( is_user_logged_in() ){
       echo "success";
       die;
    } else {
        echo "not logged";
        die;
    }
}

1 个回复
最合适的回答,由SO网友:fuxia 整理而成

这取决于你到底想做什么。如果只想显示一条短消息,请对这两条消息使用相同的回调。

但是,如果您需要完全不同的对象,并根据登录状态加载不同的附加文件,请使用单独的回调。

基本示例,可能不是建议的实现。:)

class Ajax_Controller {

    public function __construct( $action ) {

        add_action( "wp_ajax_nopriv_$action", array ( $this, \'logged_out\' ) );
        add_action( "wp_ajax_$action",        array ( $this, \'logged_in\' ) );
    }

    public function logged_out() {

        require_once __DIR__ . \'/Logged_Out_Data_Interface.php\';
        require_once __DIR__ . \'/Logged_Out_Data.php\';
        require_once __DIR__ . \'/Logged_Out_View.php\';

        $data = new Logged_Out_Data;
        $view = new Logged_Out_View( $data );
        $view->render();
    }

    public function logged_in() {

        require_once __DIR__ . \'/Logged_In_Data_Interface.php\';
        require_once __DIR__ . \'/Logged_In_Data.php\';
        require_once __DIR__ . \'/Logged_In_View.php\';

        $data = new Logged_In_Data;
        $view = new Logged_In_View( $data );
        $view->render();
    }
}
看看你的用例,要务实。如果有疑问,请比较两种方法的性能和复杂性。

结束

相关推荐

网站首页上未加载jQuery脚本

我一直在更新一个运行在旧版本WordPress上的网站,我不得不更新主题、大多数插件,最后更新了WordPress。我不得不做一些定制,包括使用插件来替换网站使用的旧主题功能,这些功能在更新的主题中不存在/不起作用。开发人员现在不支持该主题。阻止网站上线的唯一原因是主页上的向上滚动按钮不能正常工作。用户向下滚动页面后,会出现“向上滚动”按钮,单击“平滑”后,会滚动到页面顶部并消失。这是使用添加到主题自定义中的一点jQuery实现的。js文件。习惯。js文件以以下行开头:jQuery(document).r