我是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\');
}
}
我想在激活插件后,它会显示验证表单通知,禁用插件的所有功能。用户提交许可证密钥后,如果成功,将永远删除此验证表单。但当我重新加载页面时,它会再次显示表单,我无法删除它。
我怎样才能解决这个问题?如何使此验证窗体在插件激活时运行,并在验证成功后将其删除?
非常感谢你。
最合适的回答,由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
}
您可以将其放入主插件文件中。