I know that the plugin [Advanced Custom Field][1] does that. Checking [its code][2], I saw that he deals with this issue using jQuery. Using it as reference, I think this should work for you: <?php /* * Usage: * adjust $('#poststuff .your_page_box') to your meta box * disable the console.log outputs */ function se50092_script_enqueuer() { global $current_screen; if($current_screen->id == 'page') { $echo = <<<HTML <script type="text/javascript"> jQuery(document).ready( function($) { if($('#page_template').val() == 'page-portfolio.php') { // show the meta box //$('#poststuff .your_page_box').show(); } else { // hide your meta box //$('#poststuff .your_page_box').hide(); } console.log ('default value = ' + $('#page_template').val()); $('#page_template').live('change', function(){ if($(this).val() == 'page-portfolio.php') { // show the meta box //$('#poststuff .your_page_box').show(); } else { // hide your meta box //$('#poststuff .your_page_box').hide(); } console.log ('live change value = ' + $(this).val()); }); }); </script> HTML; echo $echo; } } add_action('admin_head', 'se50092_script_enqueuer'); [1]: http://wordpress.org/extend/plugins/advanced-custom-fields/ [2]: http://plugins.svn.wordpress.org/advanced-custom-fields/trunk/js/input-ajax.js