Wordpress模板(Probabaly不会成为模板)仅由一个页面使用

时间:2013-01-23 21:10:45

标签: wordpress

我只是在学习WordPress的基础知识,并想知道如何做某事。

我理解模板的概念。我可以拥有多个运行单个模板的页面,以便在整个网站上保持一致的外观。

在php文件中,我声明将product.php称为模板,其代码如下:

/*
Template Name: Products
*/

当我创建新页面时,这将在管理区域中作为模板选项提供。

然而,我正在努力理解的是以下内容。

有些页面的结构完全独特。我不希望他们运行模板。我想这背后的主要原因是最终用户可能会错误地覆盖管理部分中的模板,我希望尽可能将其保持在最低限度。

让我感到困惑的是,您还需要在WP管理部分中创建页面,或者使用任何需要的方法,它会自动显示在页面部分下吗?

有人可以解释一下如何在WordPress中完成。

感谢您的时间和帮助。

3 个答案:

答案 0 :(得分:1)

WordPress中的每个页面都将运行某种模板。如果它没有模板,那么你就不幸了,因为那时候你的数据会去哪里?为了让您的客户不会破坏某些内容,您需要创建一个模板,以便它们只是编辑文本等,而不是涉及页面结构(我们会在您创建模板时将其留给您)。 / p>

我之前有过多达十个不同模板的网站。仅仅因为某些页面确实具有独特的信息架构。如果你需要一个模板,不要害怕添加模板,因为有时真的没有别的办法。

不确定这是否是最好的建议 - 但如果我老实说担心我的客户会开始搞乱页面模板我会写一些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');

我没有测试,但我认为应该没问题。你只需要在你看到的模板文件名中切换出来 - q("#page_template option[value=\"template-file-name-1.php\"]").remove();

此外,您需要为您不希望他们看到模板选择元素的每个页面收集唯一的帖子ID。你可以通过查看URL来获得它 - 它会在URL中说出post=200之类的内容。你要把它们放在这里 - if ( $post_id == 123 || $post_id == 1234 || $post_id == 12345 )

我知道这看起来很麻烦,但我真的想不出或找不到任何其他解决方案。

答案 1 :(得分:1)

我希望其他人觉得这很有用。我还没试过,但我发现如果你创建一个名为convention page-.php的文件,那么这将自动加载带有那个slug的页面。

我知道必须有可能。感谢您的所有贡献。

答案 2 :(得分:-1)

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