wordpress开发教程:原生态的wordpress ajax

最近小V在开发一款自适应的wordpress博客主题,该wordpress主题大量数据展示与提交都用到了ajax技术,所以小V特意写一篇教程记录下,方便其他wordpress开发者做wordpress ajax应用开发的时候做参考。如果有些小伙伴还不知道什么是ajax,请自行百度脑补~~,闲话就不多说了,教程开始。

不少开发者在写插件时喜欢用以下方式实现ajax:

require_once( '../../../../wp-config.php' );

就连百度站长平台官方开发的wordpress结构化数据提交插件也是如此实现ajax的,这是一种极其不合理的写法,因为一旦用户设置的目录不同, 相对路径就会失效.并且, 如果你在你的插件中使用的是面向对象的写法, 你将无法直接使用一些变量和私有方法. 最大的坏处就是会导致整个Wordpress的框架额外重新加载一遍,严重的影响了网站的运行效率。

其实,wordpress为了方便开发者开发带有ajax功能的插件主题已经预定义好了ajax方法,我们只需按照官方预留的方法去使用就好了。在开发wordpress ajax你要先了解的是,不管是后台还是前台任何的Ajax请求都是在admin-ajax.php处理的,向admin-ajax.php发送请求的时候, 有一个必须的参数是$_REQUEST['action'], 因为admin-ajax.php需要根据用户是否登陆了来触发不同的hooks。

if ( is_user_logged_in() ) {
    /**
     * Fires authenticated AJAX actions for logged-in users.
     *
     * The dynamic portion of the hook name, `$_REQUEST['action']`,
     * refers to the name of the AJAX action callback being fired.
     *
     * @since 2.1.0
     */
    do_action( 'wp_ajax_' . $_REQUEST['action'] );
} else {
    /**
     * Fires non-authenticated AJAX actions for logged-out users.
     *
     * The dynamic portion of the hook name, `$_REQUEST['action']`,
     * refers to the name of the AJAX action callback being fired.
     *
     * @since 2.8.0
     */
    do_action( 'wp_ajax_nopriv_' . $_REQUEST['action'] );
}

以上代码取自wordpress系统文件admin-ajax.php,从以上代码我们可以看出我们要发起一个请求首先要知道这个请求是否在登录状态下发起的?不同状态触发的hook也不一样,下面是个在主题利用jquery实现ajax的示例代码:

add_action( 'wp_head', 'v7v3AjaxScript');
function v7v3AjaxScript(){
    print '<script>var v7v3_ajaxurl = "'. admin_url( 'admin-ajax.php' ) . '"' . ";</script>\n";
    print "<script>
    $(docunment).ready(function(){
        $.ajax( {
            url: v7v3_ajaxurl,
            data:{
                action : 'is_login'
            },
            type:'post',
            cache:false,
            success:function(data) {
                alert(data);
            }
        });
    });
    </scrip>";
}
  
add_action( 'wp_ajax_nopriv_is_login', 'v7v3_ajax_not_login' );
add_action( 'wp_ajax_is_login', 'v7v3_ajax_is_login' );
  
function v7v3_ajax_is_login(){
    global $current_user;
    get_currentuserinfo();
    printf( '登录用户您好 : %s!', $current_user->display_name );
    //函数结束前的die或exit很重要,一定要加。
    die;
}
  
function v7v3_ajax_not_login(){
    print '尊敬的访客您好!';
    //函数结束前的die或exit很重要,一定要加。
    die;
}

在开发wordpress ajax应用中最重要的一点就是函数结束之前一定要加die或者exit,如果不加的话会把整个wordpress框架都重新加载一遍。

发表评论

电子邮件地址不会被公开。 必填项已用*标注