我正在开发一个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;
}
对于我检查的每个网页网址(例如:http://example.com/mypage
),我得到了:
帖子ID:
模板文件:/ nfs / c11 / h05 / mnt / 205383 / domains / example.com / html / wp-content / themes / mytheme /index.php
NO
我尝试删除这些页面并重新创建它们,但它们是一样的。事实是它适用于子页面。例如:http://example.com/mypage/mychildpage
显示:
帖子ID:589
模板文件:/ nfs / c11 / h05 / mnt / 205383 / domains / example.com / html / wp-content / themes / mytheme / page-mychildpage .PHP
YES
我使用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插件),我发现我的父网页符合错误的重写规则,所以现在我想它是关于重写规则优先级的
父网页网址错误匹配: http://example.com/about
子网页网址的正确匹配: http://example.com/about/about-child
答案 0 :(得分:1)
几年后,但我遇到了几乎相同的问题。像您一样使用Query Monitor插件也帮助我弄清楚了。
我今天早些时候所做的是创建一个名为year
的自定义分类法。我的想法是按制造车辆的年份将我的帖子(现在是我客户的站点的车辆)分组。
但是,就像您一样,当我转到任何顶级页面时,我都被引导到index.php
模板文件而不是page.php
模板文件。
通过使用Query Monitor插件,我发现我得到的结果与您完全相同。我匹配的查询是year=about
。
我删除了自定义year
分类法,然后通过WordPress管理员Settings > Permalinks
和voila保存了永久链接,从而刷新了我的永久链接,现在我的顶层页面将转到正确的page.php
模板文件