黄聪:wordpress后台发布文章,自定义栏目和字段

时间:2022-10-22 13:11:37

添加一个独立的模块,每次添加文章就更方便了。。

第一步,我们要添加代码,我们把代码放在一个独立的php文件中,先新建一个php文件,比如ash_add_box.php  ,然后在function.php中添加代码加载那个php文件:

<?php require_once(TEMPLATEPATH . '/ash_add_box.php');?>  

文件名可随意,注意路径。我这里两个文件都在主题文件夹下。。接下来的工作都是变价ash_add_box.php文件。。在ash_add_box.php中只添加一对<?php  ?>标签就行了,后面所有代码都<?php  ?>之间。

第二步:首先添加下面两行代码,两个钩子:

add_action('admin_menu', 'create_meta_box');   
//在加载管理员界面界面的时候调用create_meta_box函数
add_action('save_post', 'save_postdata');
//在保存文章的时候调用save_postdata函数

 

自定义模块是在后台,所以在加载管理员界面的时候就调用函数,我们添加这些信息主要是写文章的时候,所以保存文章的时候要调用函数保存文章数据。首先定义变量来存储我们的信息:

      $new_meta_box = array(   
"description" => array(
"name"=>"description",
"std"=>"默认描述",
"title"=>"描述:"
)
,
"keywords" => array(
"name"=>"keywords",
"std"=>"默认关键字",
"title"=>"关键字:"
)
);

 

接着添加create_meta_box函数   :

function create_meta_box(){   
//先判断函数是否存在
if(function_exists('add_meta_box')){
//add_meta_box函数在文章编辑页面内添加版块,具体用法放在文章最后
add_meta_box('new-meta-box','自定义模块','new_meta_box','post','normal','high');
//此函数调用new_meta_box函数
}
}

 

再添加new_meta_box函数 ,这个函数就是定义模板样式,也就是输出模板的html代码:

function new_meta_box(){   
global $post,$new_meta_box;
foreach($new_meta_box as $meta_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="'.$mata_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/>';
}
}

 

有了上面的函数你就可以在后台看到自定义模板了。

下面就是我们开始添加的钩子中的保存数据的钩子,也就是save_postdata函数 :

function save_postdata($post_id){   
global $post,$new_meta_box;
foreach($new_meta_box as $meta_box){
if(!wp_verify_nonce( $_POST[$meta_box['name'].'_noncename'], plugin_basename(__FILE__) )){
return $post_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));
}
}

 

到了这里基本工作就完成了,剩下的就是页面调用了,更上一篇文章调用自定义字段一样。

但是注意这里我们在save_postdata函数中保存数据的函数 add_post_meta()和更新数据的函数 update_post_meta中,字段名称是$meta_box['name']._value也就是分别是description_value 、keywords_value,所以调用的时候:

    $desc="description_value";   
$key="keywords_value";
$description=get_post_meta($post->ID,$desc,true);
$keywords=get_post_meta($post->ID,$key,true);