是否可以根据使用的页面模板限制自定义元框?

时间:2012-05-01 作者:Mr.Brown

我四处搜索,没有找到任何关于使用特定;“模板”;作为何时显示自定义元框的触发目标。。。这可能吗?如果可能,您将如何编写脚本?

如果帖子/页面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档案,然后将每个艺术家页面变成一个自定义的单页面,但我不确定这是否可行

2 个回复
最合适的回答,由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更改页面模板时,显示的元框也会更改。

SO网友:brasofilo

我会这样解决:

(1)Advanced Custom Fields 生成自定义元框(包含通过ACF管理的自定义字段),该框将根据一组规则有选择地显示ACF creating a new custom field

(2)Widget Logic 仅在需要的页面中显示文本小部件

(3)enable shortcodes 在文本小部件中,创建一个适合您需要的小部件(根据一些标准显示样式化的信息)

4) 如果需要,您可以定制与小部件逻辑一起使用的函数,即。is_artist(\'name-of-artist)is_record_label(\'name-of-label\')

[UPDATE]

这些问题(重复)也很方便:

Custom meta box shown when template is chosen

Toggle admin metabox based upon chosen page template

结束