在制作wordpress主题时总需要在后台设置一些主题选项留给使用者来自定义,有时候我们也需要在后台增加一些简单功能设置,这时候我们应该如何做呢?
一般来说有两种方案:
- 使用WordPress的Settings API。要求的编程能力强,熟悉php;
- 使用现成的主题选项框架:如Options Framework Theme。要求起码能懂PHP代码,要熟悉和理解使用的主题框架。
我打算为主题添加一个全站的SEO功能,需要设置一些简单的选项,这两种方案在我看来都不太合适的。第一种太难了,PHP小白的我果断放弃了;第二种还可以考虑,但是我需要的功能只是几个文本框和选择框就能实现,用主题框架就显得块头太大,臃肿,杀鸡用牛刀了,而且我还不熟悉这个框架,还需要花时间学习和实践,所以并非一个好选择。
最理想就是有一个简单的主题后台选项的模板,有几个核心的功能选项,如:文本框,多行文本框、选择框、下拉框、单选按钮,我可以直接修改套用,不需要熟悉PHP,也不需要看使用说明。那么有没有这种简单的后台选项模板呢?我还真找到的一个:
我自己修改了一下代码,前台文字改成了中文 》更方便理解,增加了一个调用函数 》更方便options数据的调用,代码在文章末尾可以下载。后台实现的效果如下:
如何使用这个主题后台选项模板
1、把theme-options.php文件放到主题根目录;
2、在主题functions.php文件添加:
require_once ( get_template_directory() . '/theme-options.php' );
如果是子主题则改成:
require_once ( get_stylesheet_directory() . '/theme-options.php' );
3、根据的自己需求修改模板中的文本,参数;
4、主题调用参数:
<?php echo qw_get_option('sometext');?>
模板中一些代码说明
add_action( 'admin_init', 'theme_options_init' );
add_action( 'admin_menu', 'theme_options_add_page' );
动作钩子
function theme_options_init(){
register_setting( 'sample_options', 'sample_theme_options', 'theme_options_validate' );}
register_setting
注册wp_options
字段函数,sample_options
为注册字段所属的分组(group),sample_theme_options
为注册字段名称。在数据库wp_options
表中可以看到:
sample_options
和sample_theme_options
都可以修改成你自己模板的名称,如:名为是sky的模板,可以改成:
function theme_options_init(){
register_setting( 'sky_options', 'sky_theme_options', 'theme_options_validate' );}
注意:如果参数改名,后面的要一并更改过来!
function theme_options_add_page() {
add_theme_page( '主题选项', '主题选项', 'edit_theme_options', 'theme_options', 'theme_options_do_page' );}
add_theme_page函数在后台“外观”菜单项下面新建一个菜单项:
add_theme_page( $page_title, $menu_title, $capability, $menu_slug, $function);//page_titile-title标签的内容//menu_title-显示在后台左边菜单的标题//capability-访问这个页面需要的权限//menu_slug-别名,打开访问的网址,需要独一无二//function-执行的函数
function theme_options_do_page() {}
后台选项设置表单,分别是:文本框、选择框、下拉框、单选按钮、多行文本框,大家可以根据自己的需求增减,修改相关参数名称,修改文本名称。
function theme_options_validate( $input ) {}
表单输入过滤函数,确保输入数据的安全合法,这里的参数修改要对应上面参数来修改。
if ( ! function_exists( 'qw_get_option' ) ) :function qw_get_option( $name, $default = false ) {
$options = get_option( 'sample_theme_options' );if ( isset( $options[$name] ) ) {return $options[$name];}return $default;}
endif;
在数据库中,sample_theme_options
字段保存的数据是以数组的形式储存,这是我们调用数据的方法:
<?php
$options = get_option('sample_theme_options');
echo $options['sometext'];
?>
qw_get_option
函数是我额外添加的函数(源代码里并没有),主要为了更容易主题调用参数,调用方法:
<?php echo qw_get_option('sometext');?>
经验:
我使用这款框架开发了一款插件,其中比较突出的内容在这篇文章中有讲解:
对于主题的设置,有了更多的选择 ✗酷酷的✗