Have you ever want to have a meta box that only display when editing a pages that uses a particular template? That is not difficult to do if you can determine what template the page is using. This can be done with this code:
$post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'] ; $template_file = get_post_meta($post_id,'_wp_page_template',TRUE);
Now we can call our functions to create and save meta box values while that check the current template in use within our functions.php:
function sm_meta_box_add() { // get the template file name $post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'] ; $template_file = get_post_meta($post_id,'_wp_page_template',TRUE); if ($template_file == 'my-template_name.php') { add_meta_box( 'sm-meta-box-id', 'Meta box Name', 'sm_meta_box_items', 'page', 'normal', 'high' ); } } add_action( 'add_meta_boxes', 'sm_meta_box_add' ); function sm_meta_box_items() { global $post; // your mete box code } function save_sm_meta_fields ( $post_id ) { $template_file = get_post_meta($post_id,'_wp_page_template',TRUE); if ($template_file == 'my-template_name.php') { // code to save meta box values } } add_action('save_post', 'save_sm_meta_fields', 20, 2);
That’s all there is to it.
View or download this code on GitHub