誰かがドロップダウンからテンプレートを選んだ直後にエディタ画面を変更することは可能ですか?ページテンプレートがpage-portfolio.php
の場合にのみ表示されるメタボックスが必要です。私は私がこのコードを使えることを知っています:
$post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'] ;
$template_file = get_post_meta($post_id,'_wp_page_template',TRUE);
そしてif
ステートメントを使って私のボックスを追加するよりも。問題はそれがすぐには機能しないことです。ユーザーが保存せずにテンプレートリストを変更したときに「キャッチ」する瞬間を行うための非常に複雑なコーディングがなくてもこれは可能ですか?
私はプラグイン の高度なカスタムフィールド がそれをすることを知っています。コードをチェック して 、私は彼がjQueryを使ってこの問題に対処しているのを見ました。参照としてそれを使用して、私はこれがあなたのために働くべきだと思います:
/*
* 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 <<<HTML
<script type="text/javascript">
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());
});
});
</script>
HTML;
}