我想显示自定义子菜单页,如果get\\u选项为true,则只需隐藏子页。
我的函数必须做到,如果输入值为1,则显示子页,否则隐藏子页。但问题是,当我发布1 value
子菜单不隐藏。我必须刷新页面以隐藏它。
我用这个自定义父页面和子页面。
function create_test_parent() {
$page_title = __( \'Test Parent Menu\', \'test\' );
$menu_title = __( \'Test Parent Page\', \'test\' );
$capability = \'manage_options\';
$menu_slug = \'test-parent\';
$function = \'test_parent_display\';
$icon_url = plugin_dir_url( dirname( __FILE__ ) ) . \'menu_icon.png\';
$position = 2;
add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position );
}
add_action( \'admin_menu\', \'create_test_parent\' );
function create_test_sub() {
if( !get_option( \'test_option\', true ) )
return;
$parent_slug = \'test-parent\';
$page_title = __( \'Test Sub Menu\', \'test\' );
$menu_title = __( \'Test Sub Menu\', \'test\' );
$capability = \'manage_options\';
$menu_slug = \'test-menu\';
$function = \'test_sub_display\';
add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function );
}
add_action( \'admin_menu\', \'create_test_sub\' );
这里是管理显示功能
function test_sub_display() {
if( isset( $_POST[ \'test\' ] ) ) {
$value = $_POST[ \'test\' ];
if( $value == \'1\' ) {
update_option( \'test_option\', true );
} else {
update_option( \'test_option\', false );
}
}
?>
<form method="POST">
<input type="text" name="test">
<?php submit_button(); ?>
</form>
<?php
}
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成
好的,那么您将表单放在manu页面回调中,处理该表单的代码也在同一个函数中。
您可以在admin_menu
钩
所有这些都意味着,当您处理表单并更改选项的值时,菜单已经注册。因此,如果不刷新站点,它就不会改变。
要解决这个问题,您必须在注册菜单之前处理表单。
要以尊重最佳实践的方式进行,您还应该使用admin_post_
钩子来处理表单。它可能看起来像这样:
function test_sub_display() {
?>
<form method="POST" action="<?php echo esc_attr( admin_url(\'admin-post.php\') ); ?>">
<input type="hidden" name="action" value="my_test_sub_save" />
<input type="text" name="test" />
<?php submit_button(); ?>
</form>
<?php
}
function my_test_sub_save_callback() {
if ( isset( $_POST[ \'test\' ] ) ) {
$value = $_POST[ \'test\' ];
if( \'1\' == $value ) {
update_option( \'test_option\', true );
} else {
update_option( \'test_option\', false );
}
}
wp_redirect( \'<URL>\' ); // change <URL> to the URL of your admin page
exit;
}
add_action( \'admin_post_my_test_sub_save\', \'my_test_sub_save_callback\' );
另外,我不确定这是否是设计的,但您在子菜单页上显示表单,但如果设置了该选项,则不会显示该页,因此如果您隐藏子菜单,则无法更改该选项。