Ultimate Member 是一个强大而灵活的WordPress插件,可以让用户在前台注册、登录、编辑个人资料等。该插件可以让你添加漂亮的用户个人资料到你的网站中,快速创建一个先进的社区。
本文我简单的记录下分析流程,流程简介就是:
注册、登录、用户中心页面都执行短代码[ultimatemember form_id=xxxx],提交后,触发钩子template_redirect 执行 form_init;form_init根据Ultimate Member 表单的mode分别执行相应函数,就这样。
以下是详细分析:
首先Ultimate Member(以下简称um)有注册功能,肯定是要往users表添加数据的,所以我是从后台添加用户就是user-new.php开始分析的,找到添加用户关键函数 wp_insert_user ,那么um应该也可能用了该函数,后搜索果然在文件 /ultimate-member/includes/core/um-actions-register.php,函数 um_submit_form_register 行401处找到;
很明显,下面是添加一个action钩子,um_submit_form_register ,然后自然地去搜看哪里调用了这个钩子,结果是木有找到的,后来用debug_backtrace跟踪调用栈找到是在 /ultimate-member/includes/core/class-form.php 文件 函数 form_init中行412处
看到这行代码,我是惊呆了,还有这种操作,其中的
$this->post_form[‘mode’]
是在提交时带的form_id获取um的对应表单的mode,注册为register,登录是login…这样直接搜action um_subit_form_register肯定是搜不到的了;
那么继续跟,发现form_init是在template_redirect 钩子执行时触发,
这是Form类中的构造函数定义的,Form类在初始化um插件时实例化;
好,自此就分析完了,我估计登录和用户中心也是如此的,就没去细细分析了,因为
do_action( “um_submit_form_{$this->post_form[‘mode’]}”, $this->post_form );
这里是根据mode来决定执行哪个函数来处理的,有需要可自行跟踪分析下