0

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

我理解模板的概念。我可以拥有多个运行单个模板的页面,以便整个站点具有一致的外观和感觉。

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

/*
Template Name: Products
*/

然后,当我创建新页面时,它会在管理区域中作为模板选项提供给我。

但是,我很难理解的是以下内容。

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

让我感到困惑的是,对于这样的页面,您是否还需要在 WP 管理部分中创建页面,或者,使用所需的任何方法,它会自动出现在页面部分下吗?

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

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

4

3 回答 3

1

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');

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

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

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

于 2013-01-23T21:17:58.957 回答
1

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

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

于 2013-01-23T21:39:50.167 回答
-1

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

于 2013-01-23T21:20:21.007 回答