SO网友:Frank P. Walentynowicz
修订后的代码
if(is_admin()) {
add_action(\'admin_menu\', \'awesome_page_create\');
function awesome_page_create() {
$page_title = \'My Awesome Admin Page\';
$menu_title = \'Awesome Admin Page\';
$capability = \'edit_posts\';
$menu_slug = \'awesome_page\';
$function = \'my_awesome_page_display\';
$icon_url = \'\';
$position = 24;
add_menu_page($page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position);
}
function my_awesome_page_display() {
if (!current_user_can(\'manage_options\')) {
wp_die(\'Unauthorized user\');
}
$value = get_option(\'awesome_text\', \'\');
?>
<h1>My Awesome Settings Page</h1>
<form method="POST">
<label for="awesome_text">Awesome Text</label>
<input type="text" name="awesome_text" id="awesome_text" value="<?php echo $value; ?>" />
<?php wp_nonce_field(\'wpshout_option_page_example_action\', \'awesome_nonce\', false); ?>
<input type="submit" value="Save" class="button button-primary button-large" />
</form>
<?php
}
add_action(\'init\', \'process_my_awesome_form_data\');
function process_my_awesome_form_data() {
if(isset($_REQUEST[\'awesome_nonce\'])) {
if(wp_verify_nonce($_REQUEST[\'awesome_nonce\'], \'wpshout_option_page_example_action\')) {
if (isset($_POST[\'awesome_text\'])) {
update_option(\'awesome_text\', $_POST[\'awesome_text\']);
}
} else {
echo \'nonce verification failed\';
}
}
}
}
解释
if(is_admin()) {
确保您在正确的上下文中创建了管理菜单。
而不是include \'form-file.php\';
, 表单嵌入到my_awesome_page_display
函数,使其更易于调试。生产线<?php echo wp_nonce_field( \'wpshout_option_page_example_action\' ); ?>
表单中的定义更改为<?php wp_nonce_field(\'wpshout_option_page_example_action\', \'awsome_nonce\', false); ?>
. 您的原始行为输出两个相同的隐藏输入字段nonce
, 一个,因为echo
, 第二,因为第四个参数的默认值为true
(这意味着-打印此行)。
不要在中处理表单提交my_awesome_page_display
作用相反,使用init
钩子以添加表单的提交处理功能process_my_awsome_form_data
. 在该功能中,$_REQUEST[\'awsome_nonce\']
用于检索nonce
为了验证,$_POST[\'awesome_text\']
用于检索文本输入的值。