如果URL是,则停用WordPress插件

时间:2013-09-15 05:53:54

标签: php wordpress

我已经安装了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我需要将其停用。

1 个答案:

答案 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' );
}

现在每个网址都不是您要停用插件的网址,如果插件当前处于非活动状态,您的代码将启用该插件。