个性化阅读
专注于IT技术分析

WordPress不会为父页面选择页面模板

我正在开发WP主题, 而这个问题使我发疯…

对于我创建的每个页面(父页面), WP选择index.php作为模板。我知道WP模板层次结构, 但是使用page.php, page- $ slug.php还是page- $ id.php都没关系, 我也尝试过使用:

<?php
  /*
  Template Name: My Template 
  */
?>

并在编辑器中为页面分配此模板。

为了调试起见, 我还迷上了template_include, 如下所示:

add_filter( 'template_include', 'check_template_selection', 99 );

function check_template_selection( $template ) {
    global $post;
    echo "Post ID: " . $post->ID . "<br/>";
    echo "Template File:" . $template . "<br/>";
    echo is_page() ? "YES" : "NO";
    return $template;
}

对于我检查的每个页面URL(例如:http://example.com/mypage), 我都会得到:

职位ID:模板文件:/nfs/c11/h05/mnt/205383/domains/example.com/html/wp-content/themes/mytheme/index.php否

我尝试过删除页面并再次创建它们, 但这是相同的。事实是, 它对于子页面很好用。例如:http://example.com/mypage/mychildpage显示:

职位ID:589模板文件:/nfs/c11/h05/mnt/205383/domains/example.com/html/wp-content/themes/mytheme/page-mychildpage.php是

我正在使用WP 4.4.2, ACF PRO 5.3.6.1, 自定义帖子类型UI 1.2.4和Instagram Feed Pro Personal 2.0.4.1。没有其他插件。无论如何, 我都尝试将它们全部停用, 但均未成功。我从零开始开发了主题, 之前已经做过几十个主题, 而且之前从未遇到过这个问题…

这是我的.htaccess, 我的永久链接已正确配置为/%postname%/, 没有类别库。

# BEGIN WordPress

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

因此, 请提供任何关于我在此处缺少什么的建议或提示, 将非常感激。感谢大伙们!


编辑:

经过数小时的深度搜索(非常感谢John Blackbourn的Query Monitor插件), 我发现我的父页面匹配错误的重写规则, 所以现在我想这与重写规则优先级有关。

父页面URL不匹配:http://example.com/about

匹配错误
选择了错误的规则

子页面网址的正确匹配:http://example.com/about/about-child

正确的比赛
选择正确的规则

#1


几年后, 但我遇到了几乎相同的问题。像你一样使用Query Monitor插件也帮助我弄清楚了。

我今天早些时候所做的是创建一个自定义分类法, 命名为year。我的想法是按制造车辆的年份将我的帖子(现在是我客户的站点的车辆)分组。

但是, 像你一样, 当我进入任何顶层页面时, 我都被定向到index.php模板文件而不是page.php模板文件。

通过使用Query Monitor插件, 我看到了与你完全相同的结果。我匹配的查询是year = about。

我删除了自定义年份的分类法, 然后通过WordPress管理员设置>永久链接和voila保存了永久链接, 从而刷新了我的永久链接, 现在我的顶级页面将转到正确的page.php模板文件。

赞(0)
未经允许不得转载:srcmini » WordPress不会为父页面选择页面模板

评论 抢沙发

评论前必须登录!