WordPress后台发布文章,自定义栏目和字段的方法
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);?>
即可调用成功。
原文参考自:http://www.cnblogs.com/huangcong/archive/2012/07/16/2592894.html
-
无相关信息
- 宝塔面板FTP链接服务器发回了不可路由地址
- 阿里云ecs安装宝塔面板失败原因?以及安装步骤?
- 织梦手机端-识别跳转
- html如何在一个form表单中实现多个submit
- thinkphp无限分类原理和实现代码
- thinkphp6 请求(request)变量
- 帝国CMS自定义列表SQL调用方法
- 帝国CMS自定义列表的使用实例
- 帝国cms自定义列表限制某个栏目显示
- PHP中利用for循环判断一个数是不是回文数
- PHP中判断一个数是否为素数的方法
- PHP中break,continue,exit的使用与区别
- 测试PHP连接MYSQL成功与否的代码
- PHP编程求最大公约数与最小公倍数的方法示例
- PHP获取数组中单列值的方法
- PHP使用一个for循环将N*N的二维数组的所有值置1实现方法
- HTML5+css3:3D旋转木马效果相册
- HTML,CSS,font-family:中文字体和英文名称对照表
- HTML使用栅格布局实现六种筛子样式的代码详解
- 修改CSS样式实现网页变灰色/黑白代码的几个方法整理
- 黄庭坚《水调歌头·游览》我欲穿花寻路 直入白云深处
- 黄庭坚《品令·茶词》恰如灯下 故人万里 归来对影
- 杜荀鹤《溪兴》山雨溪风卷钓丝 瓦瓯篷底独斟时
- 储光羲《张谷田舍》一径入寒竹 小桥穿野花
- 赵嘏《寒塘》晓发梳临水 寒塘坐见秋
- 蔡确《夏日登车盖亭》纸屏石枕竹方床 手倦抛书午梦长
- 李峤《书》河图八卦出 洛范九畴初
- 刘长卿《饯别王十一南游》长江一帆远 落日五湖春
- 韦庄《章台夜思》芳草已云暮 故人殊未来
- 卢纶《宿澄上人院》竹窗闻远水 月出似溪中
- 孟浩然《留别王侍御维》只应守寂寞 还掩故园扉
- 苏轼《南乡子·送述古》归路晚风清 一枕初寒梦不成
- 王维《木兰柴》秋山敛馀照 飞鸟逐前侣
- 王维《栾家濑》跳波自相溅 白鹭惊复下
- 苏轼《少年游·润州作代人寄远》对酒卷帘邀明月 风露透窗纱
- 苏轼《行香子·过七里濑》一叶舟轻 双桨鸿惊 水天清 影湛波平
- 王维《汉江临泛》江流天地外 山色有无中
- 柳宗元《溪居》晓耕翻露草 夜榜响溪石
- 杜牧《赠宣州元处士》蓬蒿三亩居 宽于一天下
- 项鸿祚《清平乐·池上纳凉》水天清话 院静人销夏