设置选项未显示在WordPress插件的子菜单页面上

时间:2012-04-17 作者:user417627

所以我有一个插件,有两个用户可自定义的设置。(虽然还不完整,但我正在准备好框架。)当这两个设置位于“常规”设置页面时,它们工作正常。。。

add_action(\'admin_init\', \'mj_admin_init\');
function mj_admin_init(){
    register_setting(\'general\', \'mj_options\', \'mj_validate_input\');
    add_settings_section(\'mjid\', \'MJ Settings\', \'mj_callback\', \'general\');
    add_settings_field(\'mj_notify_email\', \'Email\', \'mj_email_input\', \'general\', \'mjid\');
    add_settings_field(\'mj_cm_enabled\', \'Enable Messages\', \'mj_cm_enabled_input\', \'general\', \'mjid\');
}

add_action(\'admin_menu\', \'mj_admin_menu\');
function mj_admin_menu(){
    do_settings_sections(\'mjid\');
}

function mj_admin(){
    // to-do later
}

function mj_callback(){
    echo \'<p>MJ Callback function produced this</p>\';
}

function mj_email_input(){
    $options = get_option(\'mj_options\');
    $value = $options[\'mj_email\'];
    echo \'<input id="mj_email" name="mj_options[mj_email]" type="text" value="\'.esc_attr($value).\'" /> <em>Email address</em>\';
}

function mj_cm_enabled_input(){
    $options = get_option(\'mj_options\');
    $value = $options[\'cm-enabled\'];
    echo \'<input id="cm-enabled" name="mj_options[cm-enabled]" type="checkbox" value=1 \'.checked(1, esc_attr($value), false).\' /> <em>Checkbox for enabled messages</em>\';
}


function mj_validate_input($input){
    $valid = array();
    $valid[\'mj_email\'] = sanitize_email( $input[\'mj_email\']);
    if($valid[\'mj_email\'] != $input[\'mj_email\']) {
        add_settings_error(\'mj_email_setting\', \'mj_texterror\', \'Invalid email\', \'error\');
    }
    $valid[\'cm-enabled\'] = intval($input[\'cm-enabled\']);
    return $valid;
}
但我想把它们放在一个单独的子菜单页上,称为“mj管理设置”。但是,不管我怎么努力,他们都不会出现。我得到的只是“mj\\U回调”函数的输出。即使debug设置为true,错误日志中也没有错误。

为了完成上述操作,我更改了mj_admin_initmj_admin_menu 功能如下:

add_action(\'admin_init\', \'mj_admin_init\');
function mj_admin_init(){
    register_setting(\'mj-admin-settings\', \'mj_options\', \'mj_validate_input\');
    add_settings_section(\'mjid\', \'MJ Settings\', \'mj_callback\', \'mj-admin-settings\');
    add_settings_field(\'mj_notify_email\', \'Email\', \'mj_email_input\', \'mj-admin-settings\', \'mjid\');
    add_settings_field(\'mj_cm_enabled\', \'Enable Messages\', \'mj_cm_enabled_input\', \'mj-admin-settings\', \'mjid\');
}

add_action(\'admin_menu\', \'mj_admin_menu\');
function mj_admin_menu(){
    add_menu_page(\'MJ Admin\', \'MJ Admin\', \'manage_options\', \'mj-admin-options\', \'mj_admin\');
    add_submenu_page(\'mj-admin-options\', \'MJ Admin - Settings\', \'Settings\', \'manage_options\', \'mj-admin-settings\', \'mj_callback\');

    do_settings_sections(\'mjid\');
}
有没有人对如何在子菜单中显示设置有任何想法?我已经翻遍了所有的抄本,我被难住了!

2 个回复
SO网友:Matthew Muro

如果您检查add_menu_page, 您将看到第五个参数是回调函数。现在,mj\\U管理功能中没有任何内容。

您需要做的是在该函数中输出表单。

<?php
function mj_admin(){
?>
    <h2>My Settings Page</h2>
    <form action="options.php" method="post">
<?php
    settings_fields( \'mj-admin-settings\' );
    do_settings_sections(\'mj-admin-settings\');
    submit_button();
?>
    </form>
<?php
}

SO网友:WebCaos

不知道这是否是问题所在,但当我添加子菜单页时,我会这样做:

add_submenu_page(\'mj-admin-options.php\', \'MJ Admin - Settings\', \'Settings\', \'manage_options\', \'mj-admin-settings\', \'mj_callback\');
键入slug及其php扩展;)

结束

相关推荐

我应该在哪里更改在header.php中设置的实际标题标记

我是WordPress的新手,被要求更改标题标签中的值。标题标签的格式为:“站点名称|标语”,在标题中动态设置。php(从其他帖子中可以看到,这似乎是WordPress的标准代码)。我只需要更改主页上的口号。网站内的所有其他页面都可以,我只需要更改主页,我不知道标题的“口号”部分是否在某处编码,或设置为属性等。我在哪里以及如何更改它??谢谢