WordPress 后台添加文章自定义 Meta 信息

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\'

\'.$meta_box[\'title\'].\'

\'; } } 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)); } } } }

然后,在主题 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 项目的标题特点。

创立完成后后台生成的代码如下:

产品设置

闪现效果如下: