下面由WordPress教程欄目給大家介紹wordpress添加meta box的方法,希望對需要的朋友有所幫助!
WordPress添加Meta Box的方法,需要使用到add meta boxes Action,該Action允許我們為任何文章類型注冊Meta Box,在該Action中,我們需要使用add_meta_box()方法來添加Meta Box的相關信息。
代碼如下
function?add_rating_meta_box($post_type,?$post)?{??? ????//?需要哪些post?type添加推薦指數?Meta?Box??? ????$types?=?array(?'post',?'page'?);??? ????foreach?(?$types?as?$type?)?{??? ????????add_meta_box(??? ????????????'rating_meta_box_id',?//?Meta?Box在前臺頁面中的id,可通過JS獲取到該Meta?Box??? ????????????'推薦指數',?//?顯示的標題??? ????????????'render_rating_meta_box',?//?回調方法,用于輸出Meta?Box的HTML代碼??? ????????????$type,?//?在哪個post?type頁面添加??? ????????????'side',?//?在哪顯示該Meta?Box??? ????????????'default'?//?優先級??? ????????);??? ????}??? }??? add_action(?'add_meta_boxes',?'add_rating_meta_box'?);
這里我們在$types數組中定義了Post和Page都需要推薦指數這個自定義字段,然后告訴WordPress使用“render_rating_meta_box”方法來渲染Meta Box,位置在側邊欄(side)。因為內容不多,所以側邊欄足夠,若內容較多,可以將“side”改為“advanced”,這樣就會在主內容區域渲染Meta Box。
接下來看看是如何渲染的
function?render_rating_meta_box(?$post?)?{??? ????//?添加?nonce?項用于后續的安全檢查??? ????wp_nonce_field(?'rating_nonce_action',?'rating_nonce_name'?);??? ????//?獲取推薦指數的值??? ????$rating_key?=?'rating';??? ????$rating_value?=?get_post_meta(?$post->ID,?$rating_key,?true?);??? ????$rating_value?=?(int)$rating_value;??? ????$html?=?'<select>';??? ????for?($i?=?0;?$i?%s星',?$i,?$selected,?$i/2);??? ????}??? ????$html?.=?'</select>';??? ????echo?$html;??? }
這里先使用wp_nonce_field()添加了一個nonce field,用來做安全檢查,然后,讀取推薦指數的值,循環1~10來輸出可供選擇的值,如果和推薦指數相同,則默認選上。通過下拉框,既可以解決輸入不方便和無法驗證的問題。記住這里下拉框的name屬性的值(rating_field),將通過它在下面的代碼中獲取選擇的值。
最后,當文章被保存時,需要將推薦指數也保存起來
function?save_rating_post_data(?$post_id?)?{??? ????//?檢查nonce是否設置??? ????if?(!isset($_POST['rating_nonce_name']))?{??? ????????return?$post_id;??? ????}??? ????$nonce?=?$_POST['rating_nonce_name'];??? ????//?驗證nonce是否正確??? ????if?(!wp_verify_nonce(?$nonce,?'rating_nonce_action'))?{??? ????????return?$post_id;??? ????}??? ????//?如果是系統自動保存,則不操作??? ????if?(?defined(?'DOING_AUTOSAVE'?)?&&?DOING_AUTOSAVE?)?{??? ????????return?$post_id;??? ????}??? ????//?檢查用戶權限??? ????if?($_POST['post_type']?==?'post')?{??? ????????if?(!current_user_can('edit_post',?$post_id?))?{??? ????????????return?$post_id;??? ????????}??? ????}??? ????$rating_key?=?'rating';??? ????//?獲取數據??? ????$rating_value?=?$_POST['rating_field'];??? ????//?更新數據??? ????update_post_meta(?$post_id,?$rating_key,?$rating_value?);??? }??? add_action(?'save_post',?'save_rating_post_data'?);
這里做了一系列檢查,包括對剛剛設置的nonce檢查,用戶權限的檢查,排除自動保存的情況。然后使用update_post_meta()方法將數據存入數據庫。
至此,我們就完成了對推薦指數自定義字段的改裝,可以很方便的選擇文章的推薦指數。
等等。。。
細心的朋友可能發現了,在應用了上面三段代碼后,的確可以實現功能。但是,在默認的自定義欄目區域下,是可以看到,有一個名為“rating”的欄目,這就是我們剛剛選擇的推薦指數。如果想讓他不在自定義欄目下,顯示,可以將上述代碼中的$rating_key改為以下劃線開頭,這樣,WordPress就不會顯示出來了。注意有兩個地方要改。
//?原來的代碼???$rating_key?=?'rating';??? //?改后的代碼???$rating_key?=?'_rating';