Wordpress模板(可能不会是一个模板),仅由一个页面使用

Wordpress模板(可能不会是一个模板),仅由一个页面使用,wordpress,Wordpress,我正在学习WordPress的基础知识,想知道如何做一些事情 我理解模板的概念。我可以用一个模板运行多个页面,这样整个站点就有了一致的外观和感觉 在php文件中,我将say product.php声明为一个模板,其中包含以下代码: /* Template Name: Products */ 然后,当我创建一个新页面时,它将作为一个模板选项在管理区域中提供给我 然而,我很难理解的是以下几点 有些页面的结构是完全独特的。我不想让他们跑掉一个模板。我想这背后的主要原因是,最终用户可能会意外地错误地覆

我正在学习WordPress的基础知识,想知道如何做一些事情

我理解模板的概念。我可以用一个模板运行多个页面,这样整个站点就有了一致的外观和感觉

在php文件中,我将say product.php声明为一个模板,其中包含以下代码:

/*
Template Name: Products
*/
然后,当我创建一个新页面时,它将作为一个模板选项在管理区域中提供给我

然而,我很难理解的是以下几点

有些页面的结构是完全独特的。我不想让他们跑掉一个模板。我想这背后的主要原因是,最终用户可能会意外地错误地覆盖管理部分中的模板,我希望尽可能将此限制在最低限度

同样让我困惑的是,对于这样一个页面,您是否仍然需要在WP admin部分中创建页面,或者,使用任何需要的方法,它是否会自动显示在pages部分下

有人能解释一下如何在WordPress中做到这一点吗


提前感谢您的时间和帮助。

WordPress中的每一页都将使用某种模板。如果它没有模板,那么你就不走运了,因为。。你的数据会去哪里?为了让你的客户不会破坏你的东西,你创建了一个模板,这样他们就可以简单地编辑文本,等等,而不必涉及页面的结构(我们将在你创建模板时留给你)

我以前有过多达十个不同模板的网站。只是因为某些页面确实具有独特的信息体系结构。如果需要模板,不要害怕添加模板,因为有时候真的没有其他方法

不确定这是否是最好的建议——但如果我真的担心我的客户会开始弄乱页面模板,我会编写一些javascript,检查他们是否是管理员,是否不是管理员,以隐藏允许他们更改模板的元素

如果您不希望用户能够看到某些模板,或者您不希望他们能够看到特定的模板文件,则可以将其放在functions.php中:

function add_jquery_admin() {
    global $parent_file;

    // if editing page in WP admin and user is not an admin
    if ( isset( $_GET['action'] ) && $_GET['action'] == 'edit' && isset( $_GET['post'] ) && $parent_file == 'edit.php' && !current_user_can('manage_options')) {

        // remove the options for each of the templates on the template select element
        echo '
        <script>
            var q = jQuery.noConflict();
            q(function(){
                q("#page_template option[value=\"template-file-name-1.php\"]").remove();
                q("#page_template option[value=\"template-file-name-2.php\"]").remove();
                q("#page_template option[value=\"template-file-name-3.php\"]").remove();
            });
        </script>
        ';

        // get current post id
        $post_id = $_GET['post'];

        // if the post id 123, 1234, or 12345 
        if ( $post_id == 123 || $post_id == 1234 || $post_id == 12345 ) { // if on one of these post ids disable the template selector

            // disable the page template select element
            echo '
            <script>
            var j = jQuery.noConflict();
            j(function(){
                j("#page_template").attr("disabled", "disabled"); 
            });
            </script>
            ';
        }
    }
}

add_filter('admin_head', 'add_jquery_admin');
函数add\u jquery\u admin(){
全局$parent_文件;
//如果在WP admin中编辑页面,并且用户不是管理员
如果(isset($\u GET['action'])&&$\u GET['action']='edit'&&isset($\u GET['post'])&&&&$parent\u file=='edit.php'&!当前用户可以('manage\u options')){
//删除模板选择元素上每个模板的选项
回声'
var q=jQuery.noConflict();
q(函数(){
q(“#page_模板选项[value=\”template-file-name-1.php\”)”).remove();
q(“#page_模板选项[value=\”template-file-name-2.php\”)”).remove();
q(“#page_模板选项[value=\”template-file-name-3.php\”)”).remove();
});
';
//获取当前帖子id
$post\u id=$\u GET['post'];
//如果post id为123、1234或12345
if($post_id==123 | |$post_id==1234 | |$post_id==12345){//if在其中一个post id上禁用模板选择器
//禁用页面模板选择元素
回声'
var j=jQuery.noConflict();
j(职能(){
j(“页面模板”).attr(“禁用”、“禁用”);
});
';
}
}
}
添加过滤器('admin_head','add_jquery_admin');
我没有测试,但我想应该没问题。您只需在看到以下内容的地方切换模板文件名--
q(“\page\u模板选项[value=\“template-file-name-1.php\”])。remove()

此外,您还需要为不希望看到模板select元素的每个页面收集唯一的post id。您可以通过查看URL获得该信息-URL中会显示类似于
post=200
。如果($post_id==123 | |$post_id==1234 | |$post_id==12345),您将把它们放在这里--
如果($post_id==123 | |$post_id==12345)


我知道这似乎有点麻烦,但我真的想不出或找不到任何其他解决方案。

就像凯尔说的那样。使用页面模板执行此操作。没有什么可失去的。创建php文件后,您可以通过wp管理面板添加页面。

我希望其他人会觉得这很有用。我还没有尝试过,但我刚刚发现,如果您创建了一个名为convention page-.php的文件,那么它将自动加载带有该段代码的页面


我知道这是可能的。感谢您的所有贡献。

感谢您的回复。我使用过其他基本的CMS,我试图实现的是这些CMS中的可能。我同意它仍然是某种模板,但我希望它是一个客户无法更改的模板,因为没有其他页面具有这种结构,因此,它不需要是可选的。我提供了一些额外的代码,这样只有管理员才能在管理员中查看/更改某些模板。您需要为他们创建一个作为编辑器用户的帐户,以使其正常工作。还需要从您的特定WordPress安装中插入一些值。嗨,Kyle,我很喜欢这项工作,所以我给您打了标记,但我找到了一个更优雅的解决方案。不过,代码方面的头号人物。我也会试一试,看看它是否有效。你想出了什么主意?我真的很感兴趣的情况下,我遇到了类似的情况。分享就是关心!:)嗨,Kyle,我确实分享了下面的答案,但这里是wordpress法典中的官方行“page-{slug}.php-如果页面slug是最近的新闻,wordpress将使用page recent news.php”。干杯。有可能会失去一些东西。结局