License validate function

时间:2019-05-27 作者:Kien Pham

我是WP的新手,正在开发许可证验证功能。我需要显示一个表单给用户输入许可证密钥,然后激活插件。我有这样的代码:

Show a notice to ask license key

function show_license_notice() { ?>    
    <div class="notice notice-warning">
        <p>Please enter license key to continue</p>
        <form action="<?php echo admin_url("admin.php?page=theme_options");?>" method="post" enctype="multipart/form-data">
            <input name="license_key" type="text" value="" />
            <input name="validate" type="submit" value="Validate" />
        </form>
    </div>
<?php }
add_action( \'admin_notices\' , \'show_license_notice\'); // run it
接下来我有一个validate函数

function validate_license($licenseKey){ ... }
按enter键提交表单时,我有代码:

// when submit license key
if(isset($_POST[\'validate\']))
{
    $licenseKey = $_POST["license_key"]; // get key from the validate from
    $response = validate_license($licenseKey); // validate it

    if($response->status == \'VALID\') {
        add_action(\'admin_notices\', \'license_valid\'); // show success notice
        remove_action(\'admin_notices\', \'show_license_notice\', 1); // remove the validate form
    } if($response->status == \'INVALID\') {
        add_action(\'admin_notices\', \'license_invalid\');
    } if($response->status == \'EXPIRED\') {
        add_action(\'admin_notices\', \'license_expired\');
    } if($response->status == \'\') {
        add_action(\'admin_notices\', \'license_null\');
    }
}
我想在激活插件后,它会显示验证表单通知,禁用插件的所有功能。用户提交许可证密钥后,如果成功,将永远删除此验证表单。但当我重新加载页面时,它会再次显示表单,我无法删除它。

我怎样才能解决这个问题?如何使此验证窗体在插件激活时运行,并在验证成功后将其删除?

非常感谢你。

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

例如,您可以尝试将函数添加到init 操作,启用插件功能(即包括插件文件)或显示管理通知。

沿着这些路线,

function licence_notice_or_enable_features() {  
  // Check if (valid) licence key (or validation token, etc.) is saved to the database
  // and add other plugin files
  // If the option does not exist or does not have a value, 
  // then the return value will be false and notice is shown
  if ( get_option( \'license_key\' ) ) {
    require_plugin_parts();
  } else {
    add_action( \'admin_notices\', \'show_license_notice\' );
  }
}
add_action( \'init\', \'licence_notice_or_enable_features\' );

function require_plugin_parts() {
  $plugin_path = plugin_dir_path( __FILE__ );
  // require $plugin_path . \'file.php\';
}

function show_license_notice() {
  // notice and licence form html
}
您可以将其放入主插件文件中。

相关推荐

Testing Plugins for Multisite

我最近发布了一个WordPress插件,它在单个站点上非常有效。我被告知该插件在多站点安装上不能正常工作,我理解其中的一些原因。我已经更新了代码,现在需要一种方法来测试更新后的代码,然后才能转到实时客户的多站点安装。我有一个用于测试的WordPress安装程序的单站点安装,但需要在多站点安装上进行测试。根据我所能找到的唯一方法是在网络上至少有两个站点来安装整个多站点安装,以测试我的插件。设置WordPress的整个多站点安装是插件开发人员的唯一/首选方式,还是有更快的测试环境可用。