Codex tools: Log in
Languages: English • 日本語 • Português do Brasil • (Add your language)
Contents |
The add_meta_box() function was introduced in Version 2.5. It allows plugin developers to add meta boxes to the administrative interface.
<?php
add_meta_box( $id, $title, $callback, $post_type, $context,
$priority, $callback_args );
?>
None.
Here is an example that adds a custom section to the post and page editing screens:
<?php /* Define the custom box */ add_action( 'add_meta_boxes', 'myplugin_add_custom_box' ); // backwards compatible (before WP 3.0) // add_action( 'admin_init', 'myplugin_add_custom_box', 1 ); /* Do something with the data entered */ add_action( 'save_post', 'myplugin_save_postdata' ); /* Adds a box to the main column on the Post and Page edit screens */ function myplugin_add_custom_box() { $screens = array( 'post', 'page' ); foreach ($screens as $screen) { add_meta_box( 'myplugin_sectionid', __( 'My Post Section Title', 'myplugin_textdomain' ), 'myplugin_inner_custom_box', $screen ); } } /* Prints the box content */ function myplugin_inner_custom_box( $post ) { // Use nonce for verification wp_nonce_field( plugin_basename( __FILE__ ), 'myplugin_noncename' ); // The actual fields for data entry // Use get_post_meta to retrieve an existing value from the database and use the value for the form $value = get_post_meta( $post->ID, '_my_meta_value_key', true ); 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="'.esc_attr($value).'" size="25" />'; } /* When the post is saved, saves our custom data */ function myplugin_save_postdata( $post_id ) { // First we need to check if the current user is authorised to do this action. if ( 'page' == $_POST['post_type'] ) { if ( ! current_user_can( 'edit_page', $post_id ) ) return; } else { if ( ! current_user_can( 'edit_post', $post_id ) ) return; } // Secondly we need to check if the user intended to change this value. if ( ! isset( $_POST['myplugin_noncename'] ) || ! wp_verify_nonce( $_POST['myplugin_noncename'], plugin_basename( __FILE__ ) ) ) return; // Thirdly we can save the value to the database //if saving in a custom table, get post_ID $post_ID = $_POST['post_ID']; //sanitize user input $mydata = sanitize_text_field( $_POST['myplugin_new_field'] ); // Do something with $mydata // either using add_post_meta($post_ID, '_my_meta_value_key', $mydata, true) or update_post_meta($post_ID, '_my_meta_value_key', $mydata); // or a custom table (see Further Reading section below) } ?>
This is an example of how to add a meta box from inside a class
/** * 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_meta_box' ) ); add_action( 'save_post', array( $this, 'save' ) ); } /** * Adds the meta box container */ public function add_meta_box() { add_meta_box( 'some_meta_box_name' ,__( 'Some Meta Box Headline', self::LANG ) ,array( &$this, 'render_meta_box_content' ) ,'post' ,'advanced' ,'high' ); } public function save( $post_id ) { // First we need to check if the current user is authorised to do this action. if ( 'page' == $_POST['post_type'] ) { if ( ! current_user_can( 'edit_page', $post_id ) ) return; } else { if ( ! current_user_can( 'edit_post', $post_id ) ) return; } // Secondly we need to check if the user intended to change this value. if ( ! isset( $_POST['myplugin_noncename'] ) || ! wp_verify_nonce( $_POST['myplugin_noncename'], plugin_basename( __FILE__ ) ) ) return; // Thirdly we can save the value to the database //if saving in a custom table, get post_ID $post_ID = $_POST['post_ID']; //sanitize user input $mydata = sanitize_text_field( $_POST['myplugin_new_field'] ); // Do something with $mydata // either using if ( !add_post_meta( $post_ID, '_my_meta_value_key', $mydata, true ) ) { update_post_meta( $post_ID, '_my_meta_value_key', $mydata ); } // or a custom table (see Further Reading section below) } /** * Render Meta Box content */ public function render_meta_box_content( $post ) { // Use nonce for verification wp_nonce_field( plugin_basename( __FILE__ ), 'myplugin_noncename' ); // The actual fields for data entry // Use get_post_meta to retrieve an existing value from the database and use the value for the form $value = get_post_meta( $post->ID, '_my_meta_value_key', true ); 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="'.esc_attr( $value ).'" size="25" />'; } }
The $callback_args
array will be passed to the callback function as the second argument. The first argument is the post's $post object.
// This function adds a meta box with a callback function of my_metabox_callback() function add_my_meta_box() { $var1 = 'this'; $var2 = 'that'; add_meta_box( 'metabox_id', 'Metabox Title', 'my_metabox_callback', 'page', 'normal', 'low', array( 'foo' => $var1, 'bar' => $var2) ); } // $post is an object containing the current post (as a $post object) // $metabox is an array with metabox id, title, callback, and args elements. // The args element is an array containing your passed $callback_args variables. function my_metabox_callback ( $post, $metabox ) { echo 'Last Modified: '.$post->post_modified; // outputs last time the post was modified echo $metabox['args']['foo']; // outputs 'this' echo $metabox['args']['bar']; // outputs 'that' echo get_post_meta($post->ID,'my_custom_field',true); // outputs value of custom field }
add_meta_box()
is located in wp-admin/includes/template.php
.