如何创建主题选项-菜单页面以保存用户值

时间:2011-08-26 作者:Mohit Bumb

我已经创建了一个wordpress主题和wordpress开发中的新功能,我想创建选项页,从用户那里获取一些值,我已经做了一点,但我不知道在哪里以及如何保存数据,简而言之,我想创建用户界面。

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

更新:以下所有代码都应该进入你的函数中。php文件

制作主题选项页面的最佳(当然也是最简单)方法可能是使用Wordpress设置API。一个注释。。。只要用一些独特的短语(我使用我的主题名)替换代码中的THEME\\u名称,就可以了。

首先,我们需要告诉WordPress,我们将使用一些主题选项。我们通过打电话register_setting.

function add_theme_options_init()
{
register_setting( THEME_NAME . \'_options_group\', THEME_NAME . \'_theme_options\',  \'validate_theme_options\' );
}
接下来,创建将在其中设置选项的“实际选项”页面。

function add_theme_options_page()
{

$page_title = \'Theme Options\';
$menu_title = \'Theme Options\';
$cap        = \'manage_options\'; // capability required for access to this menu
$slug       = THEME_NAME . \'-options\';
$callback   = \'draw_theme_options_page\';

add_options_page( $page_title, $menu_title, $cap, $slug, $callback );
}
现在添加“draw\\u theme\\u options\\u page”函数,该函数用作“add\\u theme\\u options\\u page”中的回调函数,该函数将为主题选项页输出HTML。在这个示例中,您可以看到我添加了三个字段:1)Facebook页面URL 2)Twitter句柄3)添加Twitter搜索词的字段

function draw_theme_options_page()
{

?>

<div class="wrap">
<h2>Theme Options</h2>
<form method="post" action="options.php">

<?php

    // this should be the same as the second parameter of register_setting() 
    $opt_name = THEME_NAME . \'_theme_options\'; 

    // adds all the necessary hidden form fields
    settings_fields( THEME_NAME . \'_options_group\' );

    // get the existing options
    $options = get_option( $opt_name );

                // the options fields
    $opt = array(
        \'fb_page\' => $opt_name . \'[fb_page]\',
        \'twitter\' => $opt_name . \'[twitter]\',
        \'twitter_search\' => $opt_name . \'[twitter_search]\',
    ); 

?>

    <table class="form-table">

        <!-- Facebook Page URL -->
        <tr valign="top"><th scope="row">Facebook Page</th>
            <td><input type="text" name="<?php echo $opt[\'fb_page\'] ?>" value="<?php echo $options[\'fb_page\']; ?>" /></td>
        </tr>

        <!-- Twitter Stuff -->
        <tr valign="top"><th scope="row">Twitter ID</th>
            <td><input type="text" name="<?php echo $opt[\'twitter\'] ?>" value="<?php echo $options[\'twitter\']; ?>" /></td>
        </tr>

        <tr valign="top"><th scope="row">Twitter Search Terms</th>
            <td><input type="text" name="<?php echo $opt[\'twitter_search\'] ?>" value="<?php echo $options[\'twitter_search\']; ?>" /></td>
            <td class="description">Please separate search terms using a comma</td>
        </tr>

    </table>

    <p class="submit">
        <input type="submit" class="button-primary" value="<?php _e(\'Save Changes\') ?>" />
    </p>

</form>
</div>

<?php

}
现在我们需要添加消毒功能。此函数只是确保没有格式错误的数据保存到数据库中。

function validate_theme_options( $input ) 
{   
$input[\'fb_page\']        =  wp_filter_nohtml_kses( $input[\'fb_page\'] );
$input[\'twitter\']    =  wp_filter_nohtml_kses( $input[\'twitter\'] );
$input[\'twitter_search\'] =  wp_filter_nohtml_kses( $input[\'twitter_search\'] );

return $input;
}
最后,我们实际上需要将所有这些函数绑定到正确的Wordpress挂钩中,以便添加主题选项页面并正常工作。

add_action( \'admin_init\', \'add_theme_options_init\' );
add_action( \'admin_menu\', \'add_theme_options_page\' );
这段代码几乎与我在自己的主题中使用的内容一模一样,但您可能需要稍微使用它并检查拼写错误。

有关更多信息,请查看此post on adding Plugin Options

SO网友:hfz

如果您不想为整个主题选项的编码而烦恼,Options Framework Plugin 可能对你有很大帮助。你只需安装这个插件并调整设置(你想添加什么样的用户输入,等等)。它将为您执行保存/检索/UI显示任务。

还有一个theme version 对于该插件,您可以将其包含到主题中,这样您就不必依赖于使用插件。

SO网友:Dunhamzzz

Here 是Wordpress主题开发人员的一篇好文章,我现在正在关注它。

SO网友:Colin Morgan

Otto有一篇关于WordPress设置API的非常好的博客文章。在将值保存到数据库时,它为您做了大量工作。以下是链接:WordPress Settings API Tutorial

SO网友:Sudirman

如果您愿意,可以使用此插件http://wordpress.org/extend/plugins/option-tree/

结束

相关推荐

Adding goodies to themes

如何在主题更新时向Arjuna-X等主题添加内容而不丢失?儿童主题是一种很好的方式,还是有其他选择?如果新版本的主题对我添加的功能具有本机支持,该怎么办?