Create custom meta boxes in WordPress

meta-boxes

Create custom meta boxes in WordPress

Creating custom meta boxes in WordPress is very simple it allows you to add extra data to your post or page. This tutorial will show you how to add custom meta boxes to the edit post or pages screen. Sometimes website needs some extra info about post then we are looking to WordPress core functionality and thinking about how to do that ?. So before moving on we have to know what kind of meta boxes we need. You can create textbox, textarea and else. I will provide you some codes which works more better and easy to use than others. For creating custom meta boxes you have to use function add_meta_box() provided by WordPress.



Start with the code

Add below code in your function.php file by using add_meta_box to create meta boxes for any post or page.

// add meta box to post
function themename_post_admin() {
    add_meta_box( 'post_meta_box', 'Extra Info', 'display_post_meta_box', 'post', 'normal', 'high');
}
add_action( 'admin_init', 'themename_post_admin' );

After doing this you have to add meta fields in the post. below code will create meta field for the post i am just showing you the example for textbox and textarea but you can add much more than this.

// add meta box field to post
function display_post_meta_box( $post ) {
     $name = esc_html( get_post_meta( $post->ID, 'namebox', true ) );
     $extraword = esc_html( get_post_meta( $post->ID, 'extrawords', true ) );

echo "<table width=100%>
          <tr>
             <td width='20%'>Textbox</td>
             <td width='80%'>
                 <input type='text' name='namebox' value=".$name.">
             </td>
         </tr>
         <tr>
            <td width='20%' valign='top'>Textarea</td>
            <td width='80%'>
                <textarea name='extrawords' class='widefat' rows='5'>".$extraword."</textarea>
            </td>
        </tr>
    </table>";
}

This code will display text box and textarea to the edit post screen see this screenshot to know how does it look.

meta-box-example

Now you have to use below code for saving post meta data.

// save post meta box form data
function add_themename_post_admin_fields( $post_id, $post ) {
            if( $post->post_type == 'post' ){
                   if( isset($_POST['namebox']) ){
                         update_post_meta( $post_id, 'namebox', $_POST['namebox'] );
                   }
                   if( isset($_POST['extrawords']) ){
                         update_post_meta( $post_id, 'extrawords', $_POST['extrawords'] );
                   }


            }
}
add_action( 'save_post', 'add_themename_post_admin_fields', 1, 2 );

Get the full code

// add meta box to post
function themename_post_admin() {
		add_meta_box( 'post_meta_box', 'Extra Info', 'display_post_meta_box', 'post', 'normal', 'high');
}
add_action( 'admin_init', 'themename_post_admin' );


// add meta box field to post
function display_post_meta_box( $post ) {
	 $name = esc_html( get_post_meta( $post->ID, 'namebox', true ) );
     $extraword = esc_html( get_post_meta( $post->ID, 'extrawords', true ) );

echo "<table width='100%'>
		<tr>
			<td width='20%'>Textbox</td>
			<td width='80%'>
					<input type='text' name='namebox' value=".$name.">
			</td>
		</tr>
		<tr>
            <td width='20%' valign='top'>Textarea</td>
            <td width='80%'>
                <textarea name='extrawords' class='widefat' rows='5'>".$extraword."</textarea>
            </td>
        </tr>
</table>";
}

// save post meta box form data
function add_themename_post_admin_fields( $post_id, $post ) {
            if( $post->post_type == 'post' ){
                   if( isset($_POST['namebox']) ){
                         update_post_meta( $post_id, 'namebox', $_POST['namebox'] );
                   }
                   if( isset($_POST['extrawords']) ){
                         update_post_meta( $post_id, 'extrawords', $_POST['extrawords'] );
                   } 
            }
}
add_action( 'save_post', 'add_themename_post_admin_fields', 1, 2 );

Above code makes the meta boxes ready for use now you have use this code within loop where you want to display meta box content.

  // for textbox use this
  echo esc_html( get_post_meta( $post->ID, 'namebox', true ) );
  
  // for textarea use this
  echo get_post_meta( $post->ID, 'extrawords', true ) ;

This is very simple and easy way to create meta boxes for post or pages you can also use it for custom post types. Hope this tutorial will helps you for your projects and if you have any question or comments please feel free to post below.
All the best.

2 thoughts on “Create custom meta boxes in WordPress

  1. Hi bro.

    Thanks you very much for this code, you are great man :)

    Thanks for share and greetings from Colombia :)

    Bye

Leave a Reply

Your email address will not be published. Required fields are marked *