我已经安装了SMS Validator,因此注册到我网站的所有人都必须输入电话号码才能注册
现在我创建了一个新功能(链接),以便在用户通过访问此链接进行注册时添加其他类型的用户角色: http://example.com/wp-login.php?action=register&role=vip_member
我想仅为此URL链接关闭短信验证器。
有可能以某种方式做到吗?
到目前为止使用mathielo代码取得了成功:
// Activate SMSGlobal
function activate_plugin_conditional() {
if ( !is_plugin_active('sms-validator-SMSG/sms-validator.php') ) {
activate_plugins('sms-validator-SMSG/sms-validator.php');
}
}
// Deactivate SMSGlobal
function deactivate_plugin_conditional() {
if ( is_plugin_active('sms-validator-SMSG/sms-validator.php') ) {
deactivate_plugins('sms-validator-SMSG/sms-validator.php');
}
}
// Now you in fact deactivate the plugin if the current URL matches your desired URL
if(strpos($_SERVER["REQUEST_URI"], '/wp-login.php?action=register&role=vip_member') !== FALSE){
// Calls the disable function at WP's init
add_action( 'init', 'deactivate_plugin_conditional' );
}
if(strpos($_SERVER["REQUEST_URI"], '/wp-login.php?action=register&role=seller') !== FALSE){
// Calls the enable function at WP's init
add_action( 'init', 'activate_plugin_conditional' );
}
if(strpos($_SERVER["REQUEST_URI"], '/wp-login.php?action=register&role=provider') !== FALSE){
// Calls the enable function at WP's init
add_action( 'init', 'activate_plugin_conditional' );
}
到目前为止,此代码可帮助我在此3个选定的网址中激活和停用此插件。 但是如果在此链接中停用此插件,我希望激活此插件: /wp-login.php 和 /wp-login.php?action=register
但是如果我将其设置为在URL:/wp-login.php上激活,那么它将不会在URL上停用:/ wp-login.php?action = register& role = vip_member我需要将其停用。
答案 0 :(得分:2)
您可以使用$_SERVER["REQUEST_URI"]
匹配当前网址,然后在functions.php
中停用该插件:
// Just creating the function that will deactivate the plugin
function deactivate_plugin_conditional() {
if ( is_plugin_active('plugin-folder/plugin-name.php') ) {
deactivate_plugins('plugin-folder/plugin-name.php');
}
}
// Now you in fact deactivate the plugin if the current URL matches your desired URL
if(strpos($_SERVER["REQUEST_URI"], 'my-disable-url') !== FALSE){
// Calls the disable function at WP's init
add_action( 'init', 'deactivate_plugin_conditional' );
}
注意:请注意,如果针与位置0处的给定字符串匹配,则php的strpos()
可能会返回0
,因此需要条件!==
。
从here获得我的推荐并实施了URL检查。在您想要的网址上查看$_SERVER["REQUEST_URI"]
的当前值,以获得完美匹配。
回答问题的第二部分:
您可以改进代码,删除最后2 if
并使用else
补充第一个代码,如下所示:
// Now you in fact deactivate the plugin if the current URL matches your desired URL
if(strpos($_SERVER["REQUEST_URI"], '/wp-login.php?action=register&role=vip_member') !== FALSE){
// Calls the disable function at WP's init
add_action( 'init', 'deactivate_plugin_conditional' );
}
// Otherwise, for any other URLs the plugin is activated if it's currently disabled.
else{
add_action( 'init', 'activate_plugin_conditional' );
}
现在每个网址都不是您要停用插件的网址,如果插件当前处于非活动状态,您的代码将启用该插件。