保存插件选项的高效方式

时间:2012-08-10 作者:urok93

我正在考虑为我正在开发的插件保存选项。第一个明显的候选者是wp\\U选项表。

在阅读Pro WP插件开发书籍时,我发现:

保存的每个选项都会在WordPress的选项表中添加一条新记录。您可以简单地在一个数组中同时存储多个选项:这可以避免数据库混乱,并在一个MySQL查询中更新值,以提高效率和速度。

另一方面,我也认为如果插件有很多设置,那么将所有内容存储在一个数组中可能会影响性能。因此,在这种情况下,将选项拆分为单独的记录是否有意义?

我能想到的第三个选择是创建自定义表来存储插件设置,我已经看到一些插件也这样做了。

决定走哪条路的规则/指导方针是什么?

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

将选项存储在单个数组中,并将插件作为类编写。加载构造函数中的选项并将其另存为成员变量,您将可以在插件中的任何位置访问它。

SO网友:Rutwick Gangurde

使用设置API。太棒了!下面是你如何一步一步地做到这一点。

<?php
/*
 * Add the admin page
 */
add_action(\'admin_menu\', \'wpse61431_admin_page\');
function wpse61431_admin_page(){
    add_menu_page(\'wpse61431 Settings\', \'wpse61431\', \'administrator\', \'wpse61431-settings\', \'wpse61431_admin_page_callback\');
}

/*
 * Register the settings
 */
add_action(\'admin_init\', \'wpse61431_register_settings\');
function wpse61431_register_settings(){
    //this will save the option in the wp_options table as \'wpse61431_settings\'
    //the third parameter is a function that will validate your input values
    register_setting(\'wpse61431_settings\', \'wpse61431_settings\', \'wpse61431_settings_validate\');
}

function wpse61431_settings_validate($args){
    //$args will contain the values posted in your settings form, you can validate them as no spaces allowed, no special chars allowed or validate emails etc.
    if(!isset($args[\'wpse61431_email\']) || !is_email($args[\'wpse61431_email\'])){
        //add a settings error because the email is invalid and make the form field blank, so that the user can enter again
        $args[\'wpse61431_email\'] = \'\';
    add_settings_error(\'wpse61431_settings\', \'wpse61431_invalid_email\', \'Please enter a valid email!\', $type = \'error\');   
    }

    //make sure you return the args
    return $args;
}

//Display the validation errors and update messages
/*
 * Admin notices
 */
add_action(\'admin_notices\', \'wpse61431_admin_notices\');
function wpse61431_admin_notices(){
   settings_errors();
}

//The markup for your plugin settings page
function wpse61431_admin_page_callback(){ ?>
    <div class="wrap">
    <h2>wpse61431 Settings</h2>
    <form action="options.php" method="post"><?php
        settings_fields( \'wpse61431_settings\' );
        do_settings_sections( __FILE__ );

        //get the older values, wont work the first time
        $options = get_option( \'wpse61431_settings\' ); ?>
        <table class="form-table">
            <tr>
                <th scope="row">Email</th>
                <td>
                    <fieldset>
                        <label>
                            <input name="wpse61431_settings[wpse61431_email]" type="text" id="wpse61431_email" value="<?php echo (isset($options[\'wpse61431_email\']) && $options[\'wpse61431_email\'] != \'\') ? $options[\'wpse61431_email\'] : \'\'; ?>"/>
                            <br />
                            <span class="description">Please enter a valid email.</span>
                        </label>
                    </fieldset>
                </td>
            </tr>
        </table>
        <input type="submit" value="Save" />
    </form>
</div>
<?php }
?>
这是一个工作代码,标记可以是您想要的任何内容,请确保保留settings_fieldsdo_settings_sections 呼叫输入字段的名称也应该是我提到的方式。

有关详细信息,请阅读wp tutsplus.

结束

相关推荐

我应该从wp_options表中删除瞬变吗?

我一直在清理WordPress安装的数据库,我注意到wp_options 表约为2.1mb,有1200行。我已经把它降低到大约800行,1.2mb。然而,存在一系列瞬态。我应该移除这些吗?我知道它们不会自动加载,所以可能不会对数据库造成压力。大多数瞬态具有如下格式:_site_transient_browser_03df11ec4fda7630a5... _site_transient_browser_065e09a1287aadfb4d... _site_transient_timeou