WordPress 後台開發過程中添加一個獨立的模塊,對添加文章相關的內容會起到非常方便的作用。
第一步,我們要添加代碼,我們把代碼放在一個獨立的 php 文件中.
先新建一個 php 文件,比如 links_add_box.php ,然後在 function.php 中添加代碼加載那個 php 文件:
include('admin/links_add_box.php');
文件名可隨意,注意路徑。我這裏兩個文件都在主題文件夾下。。接下來的工作都是變價 links_add_box.php 文件。。在 links_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);
也可以在循環內添加以下代碼
<?php echo get_post_meta($post->ID,"description_value",true);?>
即可調用成功。