Meta 定义事物本身的元信息。关于日常发布的网站文章,Meta 信息的应用有助于描绘文章本身,提高文章的平面感,关于一些常见类型文章的信息,比如文章的阅览量、点赞数、评论数;视频文章的更新集数、艺人信息以及产品展示文章的产品价钱、产品类型等都是通过文章的 Meta 信息存储、获取并更新的。
WordPress 提供了丰盛的 Meta 处置函数用于生成各种 Meta 信息,比如:add_post_meta()、delete_post_meta()、update_post_meta()、get_post_meta(),通过这些处置函数我们能够便利地增加、删除、修正、查询对应的 Meta 信息,以丰盛文章构造。本文即提供一段封装号的函数代码用于快速生成各种 Meta 信息,具体操作如下:
引入 class_create_post_meta.php 文件
新建一个名为 class_create_post_meta.php 的文件,将以下代码仿制进去:
\"box_id\", \'box_title\' => \"box_title\", \'ipt_id\' => \"ipt_id\", \'ipt_name\' => \"ipt_name\", \'div_class\' => \"div_class\", ); $my_meta = array( array( \'name\' => \"Meta_name\", // 对应数据库中meta_key \'std\' => \"\", \'title\' => \'Meta_title:\' ), ); new CreateMyMetaBox($meta_conf,$my_meta); */ class CreateMyMetaBox{ var $meta_conf, $my_meta, $post_id; function __construct( $meta_conf,$my_meta) { $this -> meta_conf = $meta_conf; $this -> my_meta = $my_meta; add_action(\'admin_menu\', array(&$this, \'my_meta_box_create\')); add_action(\'save_post\', array(&$this, \'my_meta_box_save\')); } public function my_meta_box_create(){ if ( function_exists(\'add_meta_box\') ){ add_meta_box( $this -> meta_conf[\'box_id\'], __($this -> meta_conf[\'box_title\'], \'QGG\'), array(&$this, \'my_meta_box_init\'), \'post\', \'normal\', \'high\' ); } } public function my_meta_box_init( $post_id ){ $class = $this -> meta_conf[\'div_class\'] ? $this -> meta_conf[\'div_class\'] : \'\'; $post_id = $_GET[\'post\']; foreach($this->my_meta as $meta_box){ $meta_box_value = get_post_meta($post_id, $meta_box[\'name\'], true); if($meta_box_value == \"\"){ $meta_box_value = $meta_box[\'std\']; } if( isset($meta_box[\'title\']) ){ echo\'\'; } } echo \' meta_conf[\'ipt_name\'].\'\" id=\"\'.$this -> meta_conf[\'ipt_id\'].\'\" value=\"\'.wp_create_nonce( plugin_basename(__FILE__) ).\'\" />\'; } public function my_meta_box_save( $post_id ){ $post_id = $_POST[\'post_ID\']; if ( !wp_verify_nonce( isset($_POST[ $this -> meta_conf[\'ipt_name\'] ]) ? $_POST[ $this -> meta_conf[\'ipt_name\'] ] : \'\', plugin_basename(__FILE__) )) return; if ( !current_user_can( \'edit_posts\', $post_id )) return; foreach($this->my_meta as $meta_box) { $data = $_POST[$meta_box[\'name\']] ? $_POST[$meta_box[\'name\']] : \"\"; if(get_post_meta($post_id, $meta_box[\'name\']) == \"\"){ add_post_meta($post_id, $meta_box[\'name\'], $data, true); }elseif($data != get_post_meta($post_id, $meta_box[\'name\'], true)){ update_post_meta($post_id, $meta_box[\'name\'], $data); }elseif($data == \"\"){ delete_post_meta($post_id, $meta_box[\'name\'], get_post_meta($post_id, $meta_box[\'name\'], true)); } } } }\'.$meta_box[\'title\'].\'
然后,在主题 functions.php 文件中增加如下代码引入。
require get_stylesheet_directory() . \'/functions/class_create_post_meta.php\';
当然,你也能够直接将代码丢到主题函数文件中去,这儿倡议独自新建个文件,便利办理。
生成自定义 Meta 字段
其实上面 class_create_post_meta.php 文件中曾经有怎么生成 Meta ,这儿给个示例特别阐明一下。代码如下:
// 文章新增产品相关 Meta $product_conf = array( \'box_id\' => \"product_meta_box\", \'box_title\' => \"产品设置\", \'ipt_id\' => \"product_meta_ipt_id\", \'ipt_name\' => \"product_meta_ipt_name\", \'div_class\' => \"post-meta-box-s2\", ); $product_meta = array( array( \"name\" => \"original_price\", \"std\" => \"\", \"title\" => \'原价:\' ), array( \"name\" => \"bargain_price\", \"std\" => \"\", \"title\" => \'特价:\' ), array( \"name\" => \"link\", \"std\" => \"\", \"title\" => \'直达链接:\' ) ); $product_meta_box = new CreateMyMetaBox($product_conf,$product_meta);
- box_id:后台 Meta 盒子的 ID 特点。
- box_title:后台 Meta 盒子的标题特点。
- ipt_id:代码中提交元素的 ID 特点。
- ipt_name:代码中提交元素的 Name 特点。
- div_class:后台 Meta 盒子中各项目的 Class 样式特点。
- name:后台每一个 Meta 项目的 name 特点,用于生成数据库中对应的字段。
- std:后台每一个 Meta 项目的默许值。
- title:后台每一个 Meta 项目的标题特点。
创立完成后后台生成的代码如下:
产品设置
闪现效果如下: