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);?>

即可呼叫成功。