WordPress不考虑模板层次结构(获取index.php而不是single.php或page.php)

时间:2012-08-03 作者:unfulvio

我在开发自定义主题时遇到了一个奇怪的错误。

编辑完自定义帖子类型单一视图的模板后,我继续处理页面的模板文件,我发现Wordpress实际上是指向索引的。php模板文件而不是页面。php在我的主题中用于生成页面外观。

我尝试在“阅读”设置中更改网站主页和博客主页的设置。我尝试刷新permalinks结构(通常使用%postname%)。我还尝试恢复到标准/=post\\u id结构。在这种情况下,效果很好。。。但是任何带有%postname%的东西都不起作用。

我禁用了插件,但没有任何更改。它只是拒绝与漂亮的permalinks合作。Actually permalinks work fine for my custom post type and it won\'t throw 404 errors. But for every single page and post will try to fetch index.php rather than single.php and page.php (or subsequent templates for pages). 我检查了自定义帖子类型的配置。。。但与页面没有可能的冲突(url重写与任何标准wordpress字符串完全不同)。

我检查了我的。htaccess与我的大多数安装一样是非常标准的:

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

我决定把一切都扔掉,作为一个测试开发站点,重新开始一个干净的安装。转储了整个数据库,销毁了安装文件。清除安装并启用wp\\u debug=true。开始时,我注意到仪表板上有一个错误:

ERROR: The themes directory is either empty or doesn’t exist. Please check your installation.
我想这是因为我将wp content文件夹重命名为“content”

我以前在使用此代码的其他安装上也这样做过(当然,“mydomain”是wpconfig中的实际域…)

define(\'WP_CONTENT_FOLDERNAME\', \'content\' );
define(\'WP_CONTENT_DIR\', ABSPATH . WP_CONTENT_FOLDERNAME );
define(\'WP_CONTENT_URL\', \'http://mydomain.com/\' . WP_CONTENT_FOLDERNAME );
define(\'WP_PLUGIN_DIR\', WP_CONTENT_DIR . \'/plugins\' );
define(\'WP_PLUGIN_URL\', WP_CONTENT_URL . \'/plugins\' );
在仔细检查并重新加载页面后,错误字符串不知何故消失了。我能够正确安装主题(因此Wordpress必须知道其文件夹的位置…)

但是,URL永久链接问题仍然存在(希望获取index.php,而不是页面的page.php模板或帖子的single.php)。这让我疯狂,因为这是一个全新的安装。

更新2

现在我正在测试TwentyEleven/Ten,它仍然抛出相同的错误。。。所以我必须排除插件和我的自定义主题。。。这可能与我的服务器配置、htaccess或wpconfig有关。。。但我真的想知道。。。因为这是在同一台服务器上运行的,我有半打wordpress站点以类似的方式配置

更新3

更改和更新wp配置后。php文件好几次我都能正常工作。。。但由于某种原因,它又不断地破裂。。。单个博客帖子和页面被重定向到索引。php(博客主页)或保存博客主页的页面模板(如果在wordpress admin的“阅读”设置中设置)。自定义帖子类型、存档和bbpress论坛页面(单个帖子和存档)、分类法。。。它们都很好用。只是页面和帖子。我仔细检查了php配置和服务器变量,一切正常

5 个回复
最合适的回答,由SO网友:unfulvio 整理而成

我要回答我自己的问题,为了那些可能和我有同样问题的人

在我的设置中,我有一个处理分类的插件;其中一个将重写slug设置为“年”-好吧,结果可能与基于日期的存档冲突(?)并导致我的帖子和页面没有加载,而是将用户重定向到博客主页——显然Wordpress模板层次结构中存在一些问题;我没有进一步调查

我没有很快捕捉到错误,因为我在停用插件时没有正确刷新永久链接-也因为某些原因,错误出现是随机的(有时,尽管仍然设置了分类法重写,但我的永久链接仍然正常工作)

最后,我将slug重命名为“period”,然后删除。htaccess,重新创建它,并从Wordpress permalinks页面创建/刷新permalinks

这似乎一劳永逸地解决了这个问题

所以如果您碰巧遇到类似的情况,请检查以某种方式改变永久链接结构的所有内容,甚至自定义帖子类型和分类法,思考您正在使用的slug,以及它是否可能与其他不明显的内容冲突

干杯

SO网友:mabbas64

我也遇到了同样的问题,在花了将近一个小时来解决这个问题后,我就解决了这个问题。

因此,如果您的CPT(自定义帖子类型)单页使用index.php 而不是single-post\\u类型模板,请确保您没有使用query_posts 不正确。对我来说,结果是我忘了打电话wp_reset_query 在使用后的一个侧边栏页面上query_posts.

只需浏览所有页面,按Ctrl+F键query_posts 并手动检查query_posts 呼叫已由关闭wp_reset_query 之后再打电话。

SO网友:vmassuchetto

首先,启用WP_DEBUG 在里面wp-config.php.

可能您正在更改默认查询。你在跑步吗query_posts 在某处看看全球$wp_query 对象如果是这样,您可能想试试WP_Query 班级或跑步wp_reset_query() 相反

SO网友:Damien

我认为您在WP config中的设置仍然可能是错误的-可能是您的ABSPATH返回了错误的值。

您需要检查和更改的行是---(我从Mark Jaquith 骨架(本地WordPress安装)

// Custom Content Directory
define( \'WP_CONTENT_DIR\', dirname( __FILE__ ) . \'/content\' );
define( \'WP_CONTENT_URL\', \'http://\' . $_SERVER[\'HTTP_HOST\'] . \'/content\' );

SO网友:Dan L

我有一个带有slug“情人节”的家长页面,这足以迫使我的页面使用single。php(post模板)不恰当!与你在slug中使用“year”的问题非常相似。slug中的任何日期类型的单词(如“day”和“year”)都会明显干扰自动模板选择。

此功能可用于强制任何页面/URL使用任何模板-对于纠正此类奇怪情况非常有用。https://codex.wordpress.org/Plugin_API/Filter_Reference/template_include

结束

相关推荐

WPML in custom page templates

我有一个Wordpress网站,使用WPML从丹斯克翻译成英语。在其中,我有一个页面,它使用自定义页面模板来显示所有帖子的标题。遗憾的是,它两次显示所有帖子:原文和译文。这是我的代码:<ul id=\"archive-list\"> <?php $args = array( \'lang\' => ICL_LANGUAGE_CODE, \'numberposts\' => \'-1\',