丢了这么多天没更新教程了,自己写到哪里都快忘了。。
前面几篇教程演示了如何在wordpress后台文章编辑页面添加自定义面板,今天的这篇文章不能算教程,和wordpress后台教程的结尾一样,直接放出一个便于使用的类文件,实际使用的时候只需要包含这个类文件,然后加载配置文件即可使用。
使用该类文件可以创建标题、文本框、文本域、下拉框、复选框、图片实时预览上传。不过少了单选框(radio)和文本编辑器,因为个人很少用到这两个,所以就没加上,如果有需要的,完全可以参照我们前面几篇教程自己添加上。
说实话,这个类文件也不完全是我写的,我也是从一个主题上弄来的,然后修改。
文件下载(压缩包内功四个文件,分别是类文件、配置文件、js文件、css文件)
版本控制
2013.07.08,版本1.0
修改复选框功能
增加编辑器功能
类文件metaboxclass.php:
/*
wordpress文章自定义字段类文件
Version: 1.0
Author: 树是我的朋友
Author URI: http://www.ashuwp.com
License: http://www.ashuwp.com/courses/highgrade/298.html
*/
classashu_meta_box{
var$options;
var$boxinfo;
//构造函数
functionashu_meta_box($options,$boxinfo){
$this->options =$options;
$this->boxinfo =$boxinfo;
add_action('admin_menu',array(&$this, 'init_boxes'));
add_action('save_post',array(&$this, 'save_postdata'));
}
//初始化
functioninit_boxes(){
$this->add_script_and_styles();
$this->create_meta_box();
}
//加载css和js脚本
functionadd_script_and_styles(){
if(basename($_SERVER['PHP_SELF']) =="page.php"
||basename($_SERVER['PHP_SELF']) =="page-new.php"
||basename($_SERVER['PHP_SELF']) =="post-new.php"
||basename($_SERVER['PHP_SELF']) =="post.php"
||basename($_SERVER['PHP_SELF']) =="media-upload.php")
{
//注意加载的脚本的url
wp_enqueue_style('metabox_fields_css', TEMJS_URI. 'metabox_fields.css');
wp_enqueue_script('metabox_fields_js',TEMJS_URI. 'metabox_fields.js');
wp_enqueue_style('thickbox');
wp_enqueue_script('media-upload');
wp_enqueue_script('thickbox');
if(isset($_GET['hijack_target']))
{
add_action('admin_head',array(&$this,'add_hijack_var'));
}
}
}
/*************************/
functionadd_hijack_var()
{
echo"\n";
}
//创建自定义面板
functioncreate_meta_box(){
if( function_exists('add_meta_box') &&is_array($this->boxinfo['page']) )
{
foreach($this->boxinfo['page']as$area)
{
if($this->boxinfo['callback'] =='')$this->boxinfo['callback'] = 'new_meta_boxes';
add_meta_box(
$this->boxinfo['id'],
$this->boxinfo['title'],
array(&$this,$this->boxinfo['callback']),
$area,$this->boxinfo['context'],
$this->boxinfo['priority']
);
}
}
}
//创建自定义面板的显示函数
functionnew_meta_boxes(){
global$post;
//根据类型调用显示函数
foreach($this->optionsas$option)
{
if(method_exists($this,$option['type']))
{
$meta_box_value= get_post_meta($post->ID,$option['id'], true);
if($meta_box_value!="")$option['std'] =$meta_box_value;
echo'boxinfo['context'].'">';
$this->$option['type']($option);
echo'