正在保存插件设置,但字段

时间:2014-09-18 作者:Mayeenul Islam

我在跟踪@Otto\'s tutorial 在设置API上。我设法将插件设置保存到options 表,但无论如何都无法保存任何字段。

<?php
/**
*   Add Settings SubMenu
*   Thanks to: Otto
*   Following: http://ottopress.com/2009/wordpress-settings-api-tutorial/
*/
function plugins_settings_page() {
    add_submenu_page(
        \'my-page-slug\',       //$parent_slug
        \'Plugin Settings\',                 //$page_title
        \'Plugin Settings\',                 //$menu_title
        \'manage_options\',                   //$capability
        \'plugin-settings\',                 //$menu_slug
        \'plugins_settings_page_callback\'    // callback function
    );
}

add_action(\'admin_menu\', \'plugins_settings_page\');

function plugins_settings_page_callback() {
    ?>
    <div class="wrap">
        <h2>Plugin Settings</h2>
        <?php settings_errors(); ?>
        <form action="options.php" method="post">
            <?php settings_fields(\'plugin_options\'); ?>
            <?php do_settings_sections(\'plugin_settings\'); ?>
            <p class="submit">
                <?php submit_button(); ?>
            </p>
        </form>
    </div> <!-- .wrap -->
<?php
}

function plugin_options_init(){

    if( false == get_option( \'plugin_settings\' ) ) {
        add_option( \'plugin_settings\' );
    }

    register_setting(
        \'plugin_options\',          // Option group*
        \'plugin_options\',          // Option Name*
        \'plugin_options_validate\'   // Sanitize Callback Function
    );
    add_settings_section(
        \'plugin_general\',              // ID/Slug*
        \'General Settings\',            // Name*
        \'plugin_section_callback\',      // Callback*
        \'plugin_settings\'                    // Page on which to add this section of options*
    );
    add_settings_field(
        \'plugin_function_activation\',       // ID*
        \'Activate Plugin Function\',        // Title*
        \'plugin_setting_field\',    // Callback Function*
        \'plugin_settings\',                   // Page (Plugin)*
        \'plugin_general\'               // Section
    );
}

// add the admin settings and such
add_action( \'admin_init\', \'plugin_options_init\' );


function plugin_section_callback() {
    //echo \'<p>Main description of this section here.</p>\';
}

function plugin_setting_field() {
    $options = get_option(\'plugin_options\');
    echo "<input name=\'plugin_options[plugin_settings_field]\' id=\'plugin_function_activation\' type=\'checkbox\' value=\'1\' ".checked( 1, $options[\'plugin_settings_field\'], false ) . " />";
}

/*// validate our options
function plugin_options_validate($input) {
    $options = get_option(\'plugin_options\');
    $options[\'text_string\'] = trim($input[\'text_string\']);
    if(!preg_match(\'/^[a-z0-9]{32}$/i\', $options[\'text_string\'])) {
        $options[\'text_string\'] = \'\';
    }
    return $options;
}*/
我假设和检查的问题包括:

我正在使用add_submenu_page() 奥托使用的地方add_options_page()

if( false == get_option( \'plugin_settings\' ) ) {
    add_option( \'plugin_settings\' );
}
我使用下划线分隔值的地方:do_settings_sections(\'plugin_settings\'), Otto使用单一值do_settings_sections(\'plugin\')

我使用了一个复选框,奥托使用了一个文本框,我处理上述情况:

除了父slug之外,没有发现任何真正的差异,因此它不会导致问题,没有该块,我无法将任何内容保存到db中,因此我添加了这个,因为我可以将数据放入db中,即使使用我的值name="" 参数都是相同的,因此保存不会受到影响,下面是db的当前状态,option_value 为空:options table for plugin settings

是什么让我感到疼痛?

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

您似乎已将验证函数注释掉。仅在测试时使用此选项:

// WARNING THIS IS HORRIBLY UNSAFE DO NOT USE IN LIVE SITES
function plugin_options_validate($input) {
   return $input;
}
现在您的选项是否保存?

验证功能不是可选的。他们接受设置,验证设置,然后返回有效的设置。如果没有验证功能,则不会从中返回设置,因此不会保存。

我刚才给出的函数非常不安全,因为它不进行验证。这里需要有代码来检查传入的设置,确保它们有效,然后返回有效的设置。否则,无法保存设置。

结束

相关推荐