黃聰:wordpress后台發布文章,自定義欄目和字段


添加一個獨立的模塊,每次添加文章就更方便了。。

第一步,我們要添加代碼,我們把代碼放在一個獨立的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);  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM