add_meta_box()

函数描述

add_meta_box()这个函数是在wordpress v2.5中添加的,它的主要作用就是为插件开发人员提供一个接口,可以为你所发布的文章,页面,链接添加一些自定义的字段。

用法

 <?php
add_meta_box( $id, $title, $callback, $page, $context, $priority, $callback_args );
?>

参数说明

$id
(string)(必要的参数)新添加自定义面板的html的id,默认:none
$title
(string)(必要的参数)新添加自定义面板的标题 默认:none
$callback
(回调函数)(必要的参数) 用来打印出自定义面板的HTML
$screen
(string)(必要的参数) 设置你想用来添加自定义面板的是文章,页面还是链接或者是自定义文章类型 (‘post’, ‘page’, ‘link’, or ‘custom_post_type’)
$context
(string) (可选参数)
$priority
(string) (可选参数) 设置自定义面板的样式(‘high’, ‘core’, ‘default’ or ‘low’)
$callback_args
(array) (可选参数) 这个可选参数会传递给之前的Callback 默认:none

例子

下面是一个添加自定义栏目的例子

<?php
/* 添加自定义面板 */
 
add_action( 'add_meta_boxes', 'myplugin_add_custom_box' );
 
// 为了兼容 v3.以前的版本
// add_action( 'admin_init', 'myplugin_add_custom_box', 1 );
 
/* 保存数据 */
add_action( 'save_post', 'myplugin_save_postdata' );
 
/* 在页面中添加一个自定义面板 */
function myplugin_add_custom_box() {
    add_meta_box( 
        'myplugin_sectionid',
        __( 'My Post Section Title', 'myplugin_textdomain' ),
        'myplugin_inner_custom_box',
        'post' 
    );
    add_meta_box(
        'myplugin_sectionid',
        __( 'My Post Section Title', 'myplugin_textdomain' ), 
        'myplugin_inner_custom_box',
        'page'
    );
}
 
/* 输入自定义面板 */
function myplugin_inner_custom_box( $post ) {
 
  // Use nonce for verification
  wp_nonce_field( plugin_basename( __FILE__ ), 'myplugin_noncename' );
 
  //输入数据的input
  echo '<label for="myplugin_new_field">';
       _e("Description for this field", 'myplugin_textdomain' );
  echo '</label> ';
  echo '<input type="text" id="myplugin_new_field" name="myplugin_new_field" value="whatever" size="25" />';
}
 
/*保存自定义面板中的值*/
function myplugin_save_postdata( $post_id ) {
 
  if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
      return;
 
  if ( !wp_verify_nonce( $_POST['myplugin_noncename'], plugin_basename( __FILE__ ) ) )
      return;
 
  if ( 'page' == $_POST['post_type'] ) 
  {
    if ( !current_user_can( 'edit_page', $post_id ) )
        return;
  }
  else
  {
    if ( !current_user_can( 'edit_post', $post_id ) )
        return;
  }
 
  $mydata = $_POST['myplugin_new_field'];
 
}
?>

下面这个例子就用class 类添加 meta

/**
 * Calls the class on the post edit screen
 */
function call_someClass() 
{
    return new someClass();
}
if ( is_admin() )
    add_action( 'load-post.php', 'call_someClass' );
 
/** 
 * The Class
 */
class someClass
{
    const LANG = 'some_textdomain';
 
    public function __construct()
    {
        add_action( 'add_meta_boxes', array( &$this, 'add_some_meta_box' ) );
    }
 
    /**
     * Adds the meta box container
     */
    public function add_some_meta_box()
    {
        add_meta_box( 
             'some_meta_box_name'
            ,__( 'Some Meta Box Headline', self::LANG )
            ,array( &$this, 'render_meta_box_content' )
            ,'post' 
            ,'advanced'
            ,'high'
        );
    }
 
 
    /**
     * Render Meta Box content
     */
    public function render_meta_box_content() 
    {
        echo '<h1>TEST OUTPUT - this gets rendered inside the meta box.</h1>';
    }
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注