wordpress自定义字段(1):什么是自定义字段?
在本文开篇前,我们得首先了解一个概念——wordpress自定义字段。那么,什么是wordpress自定义字段?wordpress自定义字段,就是额外给wordpress文章添加的一个元素,如:产品价格。wordpress自定义字段存放在数据库的 wp_postmeta表中,表中包含4个属性:meta_id(字段ID)、post_id(文章ID)、meta_key(字段名称)、meta_value(字段值)。字段ID基本没用,只是在数据库中的标识,而post_id、meta_key、meta_value这3个是添加元素时必需要的。
wordpress程序就内置了一个自定义字段栏目,这个自定义字段栏目就在后台的发表文章页面,一般在发表文章内容框下方就是,名称就是meta_key,值就是meta_value。如下图:
如果你的文章内容框下方没有这个wordpress自定义栏目,可能是因为你没有勾选顶部的“自定义栏目”,操作:点击页面右上角的“显示选项”,然后勾选“自定义栏目”,如下图:
然后,我们就可以在发表文章的时候,点击图1上的“输入新栏目”,填写名称和值,然后点击”添加自定义栏目“,就可以了。
wordpress自定义字段的作用远不止这些,它的作用还有着非常的强大,可很好地丰富我们的wordpress网站,让wordpress网站的功能更加强大强壮。比方说:你想做一个商城主题,这时你需要给产品详细页面添加“产品名称、产品类别、产品规格、产品原价、产品价格、购物车、购买产品……等等,这些都是可以通过wordpress自定义字段来实现的。怎样通过wordpress自定义字段来实现这些功能呢?这个,我们会在后台的章节中详细解说。
wordpress自定义字段(2):自定义字段操作函数
前文我们介绍了wordpress自带的自定义字段栏目及使用方法。本章我们将就wordpress主题制作中常用到的wordpress自定义字段操作函数来展开讲解。在wordpress主题制作中我们会经常用到这些函数,如调用文章图片。wordpress自定义字段操作函数主要有四种:添加函数、更新(修改)函数、删除函数、获取(值)函数,其中获取(值)函数是我们在wordpress主题制作中经常用到的。
1、wordpress自定义字段的添加函数,就是为文章往数据库中添加一个字段:
<?php
add_post_meta(post_id,meta_key, meta_value,unique);
//post_id--文章id
//meta_key--字段名称
//meta_value--值
//unique--(布尔值、可选)字段是否唯一,如果设置为true,那么添加字段的时候如果这个字段已经存在了,就不会再添加
?>
2、wordpress自定义字段的更新函数,用来更新一个已经存在的字段:
<?php
update_post_meta(post_id,meta_key, meta_value,prev_value);
//post_id--文章id
//meta_key--字段名称
//meta_value--新的值
//prev_value--(可选)以前的值,如果这个字段有几个,那么只会更新匹配的这个值
?>
3、wordpress自定义字段的删除函数,用来删除一个已经存在的字段:
<?php
delete_post_meta(post_id,meta_key, meta_value);
//post_id
//meta_key
//meta_value--(可选)要删除的值,要删除特定值的字段,对于字段不唯一来说有意义,如果这个参数留空,那么所有这个字段名称的字段都会被删除
?>
4、wordpress自定义字段值的获取函数,用来获取一个已经存在的字段的值,这个函数也是我们在wordpress主题制作中经常会用到的。
<?php
meta_values = get_post_meta(post_id, key,single);
//post_id
//key字段名称
//$single--(布尔值、可选)如果设置为true,对于存在多个相同的字段,这个函数也只会返回一个唯一的值。如果设置为false或者留空,那么会返回一个数组
?>
好了,有关wordpress自定义字段操作函数的问题就写到这里了。后面我们将继续对wordpress自定义字段的相关内容进行扩展讲解。
wordpress自定义字段(3):怎样添加自定义字段面版?
ordpress自定义字段的功能时非常强大的,在wordpress主题制作过程中,我们可以用wordpress自定义字段来干很多的事情,比如:调用文章图片、添加关键词面版、添加商品信息模块……等等,总之,wordpress自定义字段可以帮助主题开发者做很多的事情了。嗯,本章通过“如何创建wordpress自定义字段面版”这个简单案例来讲解自定义字段在wordpress主题制作过程中的使用。
首先在主题文件夹下创建一个metabox.php文件,然后,在主题的functions.php文件中引用metabox.php文件,即include这个文件。然后就是给meatbox.php文件添加代码了,本案例以在后台文章发表页面添加“关键词和描述”自定义字段面版。
1、创建一个二维数组,代码如下:
$new_meta_boxes =
array(
"description" => array(
"name" => "description",
"std" => "这里填默认的网页描述",
"title" => "网页描述:"),
"keywords" => array(
"name" => "keywords",
"std" => "这里填默认的网页关键字",
"title" => "关键字:")
);
数组的第一个元素就是description字段的信息,即文章描述,包括标题、字段名、描述信息。第二个元素是keywords字段,即关键字。
2、创建显示函数显示描述和关键字面版,代码如下:
function new_meta_boxes() {
global post,new_meta_boxes;
foreach(new_meta_boxes asmeta_box) {
meta_box_value = get_post_meta(post->ID, meta_box['name'].'_value', true);
if(meta_box_value == "")
meta_box_value =meta_box['std'];
echo'<input type="hidden" name="'.meta_box['name'].'_noncename" id="'.meta_box['name'].'_noncename" value="'.wp_create_nonce( plugin_basename(__FILE__) ).'" />';
// 自定义字段标题
echo'<h4>'.meta_box['title'].'</h4>';
// 自定义字段输入框
echo '<textarea cols="60" rows="3" name="'.meta_box['name'].'_value">'.$meta_box_value.'</textarea><br />';
}
}
这个函数用来显示自定义面板的内容,将作为add_meta_box函数才callback参数调用。
3、创建面版,代码如下:
function create_meta_box() {
global $theme_name;
if ( function_exists('add_meta_box') ) {
add_meta_box( 'new-meta-boxes', '自定义模块', 'new_meta_boxes', 'post', 'normal', 'high' );
}
}
4、 保存面版更新数据,代码如下:
function save_postdata( post_id ) {
globalpost, new_meta_boxes;
foreach(new_meta_boxes as meta_box) {
if ( !wp_verify_nonce(_POST[meta_box['name'].'_noncename'], plugin_basename(__FILE__) )) {
returnpost_id;
}
if ( 'page' == _POST['post_type'] ) {
if ( !current_user_can( 'edit_page',post_id ))
return post_id;
}
else {
if ( !current_user_can( 'edit_post',post_id ))
return post_id;
}data = _POST[meta_box['name'].'_value'];
if(get_post_meta(post_id,meta_box['name'].'_value') == "")
add_post_meta(post_id,meta_box['name'].'_value', data, true);
elseif(data != get_post_meta(post_id,meta_box['name'].'_value', true))
update_post_meta(post_id,meta_box['name'].'_value', data);
elseif(data == "")
delete_post_meta(post_id,meta_box['name'].'_value', get_post_meta(post_id,meta_box['name'].'_value', true));
}
}
上面的代码,在前面创建面版后,通过add_post_meta()函数向数据库增加面版信息。这段代码还通过update_post_meta()更新和delet_post_meta()来删除相关信息。
5、添加触发动作。使用动作勾子来调用create_post_meta()函数和save_postdata()函数,代码如下:
add_action('admin_menu', 'create_meta_box');
add_action('save_post', 'save_postdata');
好了,到这里,wordpress自定义字段面版就添加成功了,效果如下图:
这样,我们在发表文章的时候,就可以添加关键字和文章描述。如果想让前台的代码中能展示这个文章描述和关键字,以利于SEO,我们还要在主题的header.php文件中调用这2个参数。这时,可以通过get_post_meta()函数来调用。代码如下:
$description = get_post_meta($post->ID, "description_value", true);
$keywords = get_post_meta($post->ID, "keywords_value", true);
好了,wordpress如何添加自定义字段面版就介绍到这里,后续我们继续扩展wordpress自定义字段的功能。
wordpress自定义字段(4):给自定义面版添加下拉框、复选框等表单项
上一章我们为后台文章发表页添加了wordpress自定义字段面版——关键字与文章描述面版。但是,在我们wordpress主题目的开发中,只是这2项,还是远远不够。我们在wordpress主题开发时,还是可以大大地利用wordpress自定义字段的更加强大的功能的。比如:自定义面版中添加单选框、复选框、文本框、文本域、下拉选择框、上传图片等等。那么,怎样在wordpress自定义面版中添加下拉框、复选框这些表单项呢?这就是本章要讲的内容了,本章我们将给自定义面板添加简单的表单:文本框、文本域、单选框、复选框、下拉选择框。完成后,效果如下图:
1、添加字段数组,代码如下:
$new_meta_boxes = array(
"title" => array(
"name" => "_meta_title",
"std" => "",
"title" => "标题",
"type"=>"title"),
"keywords" => array(
"name" => "_meta_keywords",
"std" => "",
"title" => "关键字",
"type"=>"text"),
"description" => array(
"name" => "_meta_description",
"std" => "",
"title" => "描述",
"type"=>"textarea"),
"category" => array(
"name" => "_meta_cate",
"std" => "",
"title" => "选择分类",
"subtype"=> "cat",
"type"=>"dropdown"),
"radio" => array(
"name" => "_meta_radio",
"std" => 1,
"title" => "单选框",
"buttons" => array('Yes','No'),
"type"=>"radio"),
"checkbox" => array(
"name" => "_meta_checkbox",
"std" => 1,
"title" => "复选框",
"type"=>"checkbox"),
);
这段代码是我们要在自定义面版中需要添加的表单项。
2、创建自定义面版内容函数,代码如下:
//面板内容的函数
function new_meta_boxes() {
global post,new_meta_boxes;
foreach(new_meta_boxes asmeta_box) {
meta_box_value = get_post_meta(post->ID, meta_box['name'].'_value', true);
if(meta_box_value != "")
meta_box['std'] =meta_box_value;
echo'<input type="hidden" name="'.meta_box['name'].'_noncename" id="'.meta_box['name'].'_noncename" value="'.wp_create_nonce( plugin_basename(__FILE__) ).'" />';
switch ( meta_box['type'] ){
case 'title':
echo'<h4>'.meta_box['title'].'</h4>';
break;
case 'text':
echo'<h4>'.meta_box['title'].'</h4>';
echo '<input type="text" size="40" name="'.meta_box['name'].'_value" value="'.meta_box['std'].'" /><br />';
break;
case 'textarea':
echo'<h4>'.meta_box['title'].'</h4>';
echo '<textarea cols="60" rows="3" name="'.meta_box['name'].'_value">'.meta_box['std'].'</textarea><br />';
break;
case 'dropdown':
echo'<h4>'.meta_box['title'].'</h4>';
if(meta_box['subtype'] == 'cat'){
select = 'Select category';entries = get_categories('title_li=&orderby=name&hide_empty=0');//获取分类
}
echo '<p><select name="'.meta_box['name'].'_value"> ';
echo '<option value="">'.select .'</option> ';
foreach (entries askey => entry){id = entry->term_id;title = entry->name;
if (meta_box['std'] == id ){selected = "selected='selected'";
}else{
selected = "";
}
echo "<optionselected value='". id."'>".title."</option>";
}
echo '</select><br />';
break;
case 'radio':
echo'<h4>'.meta_box['title'].'</h4>';counter = 1;
foreach( meta_box['buttons'] asradiobutton ) {
checked ="";
if(isset(meta_box['std']) && meta_box['std'] ==counter) {
checked = 'checked = "checked"';
}
echo '<input '.checked.' type="radio" class="kcheck" value="'.counter.'" name="'.meta_box['name'].'_value"/>'.radiobutton;counter++;
}
break;
case 'checkbox':
echo'<h4>'.meta_box['title'].'</h4>';
if( isset(meta_box['std']) && meta_box['std'] == 'true' )checked = 'checked = "checked"';
else
checked = '';
echo '<input type="checkbox" name="'.meta_box['name'].'_value" value="true" '.$checked.' />';
break;
}
}
}
3、创建自定义面版,代码如下:
function create_meta_box() {
global $theme_name;
if ( function_exists('add_meta_box') ) {
add_meta_box( 'new-meta-boxes', '自定义模块', 'new_meta_boxes', 'post', 'normal', 'high' );
}
}
4、保存更新自定义面版数据。代码如下:
function save_postdata( post_id ) {
globalpost, new_meta_boxes;
foreach(new_meta_boxes as meta_box) {
if ( !wp_verify_nonce(_POST[meta_box['name'].'_noncename'], plugin_basename(__FILE__) )) {
returnpost_id;
}
if ( 'page' == _POST['post_type'] ) {
if ( !current_user_can( 'edit_page',post_id ))
return post_id;
}
else {
if ( !current_user_can( 'edit_post',post_id ))
return post_id;
}data = _POST[meta_box['name'].'_value'];
if(get_post_meta(post_id,meta_box['name'].'_value') == "")
add_post_meta(post_id,meta_box['name'].'_value', data, true);
elseif(data != get_post_meta(post_id,meta_box['name'].'_value', true))
update_post_meta(post_id,meta_box['name'].'_value', data);
elseif(data == "")
delete_post_meta(post_id,meta_box['name'].'_value', get_post_meta(post_id,meta_box['name'].'_value', true));
}
}
5、添加动作触发函数。代码如下:
add_action('admin_menu', 'create_meta_box');
add_action('save_post', 'save_postdata');
相关函数,我们在前面已经做了详细的解说,所以这里就不多说了,只是帖出代码,供大家参考。
好了,有关wordpress自定义面版添加文本框、复选框、下拉框等表单项的内容就介绍到这里,如有疑问可参阅高时银博客的相关内容,后期将继续为大家讲解wordpress自定义字段的相关内容。谢谢参阅。