2017-09-21

猎数博客

数据挖掘,机器学习

WordPress中添加自定义参数

作者:江航 / 2011-06-11 / (阅读 3,413 次) /



在开发wordpress插件中,向wordpress数据库中添加参数是必须的,不然我们需要另外的方式来处理这些参数。wordpress中提供了一些setting API 来让你在现有的setting页面中添加自定义参数。

首先看看wordpress的控制面板(dashboard)中,有一栏是设置相关的,这些设置也分为几个页,缺省的有“常规选项”,“撰写”,“阅读”,“讨论”,等等,如果你安装了一些插件,有些插件会自己带一个设置页面。

这篇文章介绍下如何向这些缺省页中添加参数。

第一步 添加组

假定我们要在阅读页面中添加一些参数,那么首先需要向这个页面添加一个组(section),添加组的函数是
add_settings_section($id, $title, $callback, $page)

 
其中
$id为组的名字。
$title是在页面上显示的组的名字。
$callback是显示该组内容的函数,这个函数需要显示他的输出。
$page是setting页的名字,也就是上面提到的几个设置页,他们对应的名字分别为(general,reading,writing,media等等)

add_settings_section(‘eg_setting_section’,
 ‘Example settings section in reading’,
 ‘eg_setting_section_callback_function’,
 ‘reading’);

function eg_setting_section_callback_function() {
 echo ‘<p>following is our settings section</p>’;
}

这个调用将在reading页面添加一个section,该section的id为eg_setting_section,标题为‘Example settings section in reading’,同时指定了一个callback函数,添加的页面是reading。
下面就是callback函数的定义,只是简单的显示了一段话。

第二步 添加变量

这样就向reading页面中添加了一个设置组,但是什么自定一变量都还没有加进去。
要在这个组中添加一个变量,需要调用函数
add_settings_field($id, $title, $callback, $page, $section = ‘default’, $args = array())

**
其中
$id为变量名字
$title为变量在页面上显示的名字
$callback为显示该变量
$page 页面,同上面的函数
$section 组id ,也就是上面提到的eg_setting_section。
$args 额外的参数

下面是实例:
add_settings_field(‘eg_setting_name’,
 ‘Example setting Name’,
 ‘eg_setting_callback_function’,
 ‘reading’,
 ‘eg_setting_section’);

function eg_setting_callback_function() {
 echo ‘<input name=”eg_setting_name” id=”gv_thumbnails_insert_into_excerpt” type=”checkbox” value=”1″ ‘ . checked( 1, get_option(‘eg_setting_name’, false) ) . ‘/> Explanation text’;
}

其中,添加的变量名为eg_setting_name,显示在页面上的名字为“Example setting Name” ,callback函数为eg_setting_callback_function ,页面为reading,section为上面添加的eg_setting_section。

再看这个回调(callback)函数
显示的是一个input box,名字为变量名,然后是input box的一些属性,最后是该变量名的解释。
注意这里调用了一个函数
checked(1,get_option(‘eg_setting_name’,false))
关于这个函数,可以参考下面这两种等价的写法
<input type=’checkbox’ name=’options[postlink]’ value=’1′ <?php if ( 1 == $options[‘postlink’] ) echo ‘checked=”checked”‘; ?> />

<input type=”checkbox” name=”options[postlink]” value=”1″ <?php checked( $options[‘postlink’], 1 ); ?> />

后面可以跟第三个可选参数,含义为
whether the function echoes “checked” when the two values are identical  Note: whether this is true or false, the appropriate value will be returned.
这里应该没有第三个参数,我怀疑原文这里的代码有点问题。所以把false作为get_option的参数,而不是checked的参数。

关于get_option函数,他用来从数据库中获得一个参数的值,通常用法为
 <?php echo get_option( ‘option name’, $default ); ?>
其中’option name’ 为参数名字,$default 意思是如果这个参数数据库中没有,缺省的返回值。

第三步 注册变量

好,到现在我们在reading页面添加了一个section,并且为这个section添加了一个变量,接下来就需要注册这个变量,然后wordpress后台就会在我们改动这个变量值是自动更新数据库。
register_setting( $option_group, $option_name, $sanitize_callback )

要注册上面的那个变量,调用为
register_setting(‘reading’,’eg_setting_name’);

最后需要把添加section,变量,注册变量的部分做成一个函数,并且把这个函数添加到admin_init action中,并且把这个php做成一个插件,启用这个插件,就可以在reading页面中看到这个变量了。

以下是完整的代码:

 

  register_setting(‘reading’,’eg_setting_name’);

 }// eg_settings_api_init()

 

 add_action(‘admin_init’, ‘eg_settings_api_init’);

 

 

 // ——————————————————————

 // Settings section callback function

 // ——————————————————————

 //

 // This function is needed if we added a new section. This function

 // will be run at the start of our section

 //

 

 function eg_setting_section_callback_function() {

  echo ‘
Intro text for our settings section
‘;

 }

 

 // ——————————————————————

 // Callback function for our example setting

 // ——————————————————————

 //

 // creates a checkbox true/false option. Other types are surely possible

 //

 

 function eg_setting_callback_function() {

  echo ‘ Explanation text’;

 }

?>

这段代码做出的效果如下图:

参考手册:http://codex.wordpress.org/Settings_API#Function_Reference



Wordpress一览无余,源码面前没有秘密,wordpress的函数调用库,展示wordpress页面打开过程中十几万个函数调用,学习WP开发的绝佳资源。点击这里进入

本文地址: http://www.bagualu.net/wordpress/archives/766 转载请注明






相关文章

  • 再说Wordpress中添加小挂件widget( 5,869 )
  • Wordpress中添加自定义参数( 3,413 )
  • WordPress代码之apply_filters( 3,273 )
  • 微博分享按钮( 3,226 )
  • WordPress版权声明插件( 3,199 )
  • wordpress函数调用库( 2,634 )
  • 通过wpdb访问WordPress数据库( 2,444 )
  • 通过wordpress debug插件,显示filter调用过程( 2,405 )
  • 用Wordpress做相册( 2,398 )
  • WordPress 代码之 add_filter( 2,337 )
  • Leave a Reply

    您必须登录以发表评论,

    沪ICP备11036560号
    联系我: jianghang at bagualu.net