我四处搜索,没有找到任何关于使用特定;“模板”;作为何时显示自定义元框的触发目标。。。这可能吗?如果可能,您将如何编写脚本?
如果帖子/页面ID是唯一切实可行的选择,那么是否可以针对父页面ID而不是单个页面ID?
编辑#1
以帮助进一步解释项目的细节,我将简要概述为什么我只想为特定页面模板实例化自定义元框。。。
我的网站目前的设置方式是在一个唱片标签上为艺术家定制一组静态页面。最初这很好,因为他们不需要和/或要求更动态的解决方案,但现在他们需要经常更新每个艺术家个人资料页的个人简历/图片/等,这使得我当前的设置不是很有用。
目前,有一个录制艺术家页面用作存档,然后所有艺术家页面都是该页面的子页面。
Additionally, I also need to allow personalized widgets to each artists sidebar which is a key part of deciding which direction to go.
<我唯一考虑过的另一种选择是将录音艺术家档案转换为CPT档案,然后将每个艺术家页面变成一个自定义的单页面,但我不确定这是否可行
最合适的回答,由SO网友:Bainternet 整理而成
我需要同样的东西,基于所选页面模板显示一个元盒,因为用户必须选择一个页面模板并保存,只有这样我才能知道要显示哪个元盒,我最终显示了所有元盒,并使用一些简单的jQuery只显示所需的元盒,而不必先保存,这里:
function custom_metabox_per_template() {
global $pagenow,$typenow;
if ( is_admin() && in_array( $pagenow, array( \'post.php\', \'post-new.php\' ) ) && $typenow == \'page\') {
$script = <<< EOF;
<script type=\'text/javascript\'>
jQuery(document).ready(function($) {
//hide all metaboxs
function hide_all_custom_metaboxes(){
$(\'#full-with.php\').hide();
$(\'#showcase.php\').hide();
$(\'#no-sidebar-page.php\').hide();
}
//show a metabox
function show_custom_metabox(meta_id){
var selector = "#"+meta_id;
if( $(selector).length)
$(selector).show();
}
//first hide all metaboxes
hide_all_custom_metaboxes();
//then check for selected page template and show the corect metabox
var current_metabox = $(\'#page_template\').val();
show_custom_metabox(current_metabox);
//and last listen for changes update when needed
$(\'#page_template\').bind("change", function(){
hide_all_custom_metaboxes();
show_custom_metabox($(\'#page_template\').val());
});
});
</script>
EOF;
echo $script;
}
}
add_action(\'admin_footer\', \'custom_metabox_per_template\');
诀窍是为元盒id指定与模板文件名称匹配的id,您可以在以下示例中看到:
full-with.php
,
showcase.php
,
no-sidebar-page.php
是定义页面模板的主题文件的名称,当i user更改页面模板时,显示的元框也会更改。