Benutzerdefinierte Meta-Box, wenn die Vorlage ausgewählt wird

Mögliche Duplikate:
Schalten Sie die Admin-Metabox basierend auf der ausgewählten Seitenvorlage um

Ist es möglich, den Editor-Bildschirm sofort zu ändern, nachdem jemand eine Vorlage aus dem Dropdown ausgewählt hat? Ich brauche eine Metabox, die nur angezeigt wird, wenn die Seitenvorlage “side page-portfolio.php lautet. Ich weiß, dass ich diesen Code verwenden kann:

$post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'] ;

$template_file = get_post_meta($post_id,'_wp_page_template',TRUE);

Und dann meine Boxen mit if statementen hinzufügen. Das Problem ist, dass es nicht sofort funktioniert. Ist das überhaupt möglich ohne eine sehr aufwendige Codierung zu “fangen”, wenn der Benutzer die Vorlagenliste ohne Speichern ändert?

Solutions Collecting From Web of "Benutzerdefinierte Meta-Box, wenn die Vorlage ausgewählt wird"

Ich weiß, dass das Plugin Advanced Custom Field das macht. Ich habe seinen Code überprüft und festgestellt , dass er sich mit jQuery um dieses Problem kümmert. Wenn ich es als Referenz benutze, sollte das für dich funktionieren:

 /* * Change Meta Box visibility according to Page Template * * Observation: this example swaps the Featured Image meta box visibility * * Usage: * - adjust $('#postimagediv') to your meta box * - change 'page-portfolio.php' to your template's filename * - remove the console.log outputs */ add_action('admin_head', 'wpse_50092_script_enqueuer'); function wpse_50092_script_enqueuer() { global $current_screen; if('page' != $current_screen->id) return; echo < < jQuery(document).ready( function($) { /** * Adjust visibility of the meta box at startup */ if($('#page_template').val() == 'page-portfolio.php') { // show the meta box $('#postimagediv').show(); } else { // hide your meta box $('#postimagediv').hide(); } // Debug only // - outputs the template filename // - checking for console existance to avoid js errors in non-compliant browsers if (typeof console == "object") console.log ('default value = ' + $('#page_template').val()); /** * Live adjustment of the meta box visibility */ $('#page_template').live('change', function(){ if($(this).val() == 'page-portfolio.php') { // show the meta box $('#postimagediv').show(); } else { // hide your meta box $('#postimagediv').hide(); } // Debug only if (typeof console == "object") console.log ('live change value = ' + $(this).val()); }); });  HTML; }