【发布时间】:2019-01-24 20:34:23
【问题描述】:
我正在使用 Timber 和 Twig 创建一个自定义 WordPress 主题,但我很难让我的自定义 404 页面呈现。
最初,我网站上的每个页面都在functions.php 中定义了一个自定义路由,而我的404 逻辑在index.php 中。这可能不是完成此任务的最佳方式,但它是我可以让它工作的唯一方式——我在 Timber 文档中找不到太多关于使用自定义主题创建 404 页面的信息。
index.php:
<?php
$context = Timber::get_context();
$post = new TimberPost();
$context['page'] = $post;
global $wp;
$url = home_url($wp->request);
$context['url'] = preg_replace('#^https?://#', '', rtrim($url, '/'));
Timber::render('views/pages/404.twig', $context);
这很好用,直到我需要添加通配符路由,以便客户端可以自己添加新页面而无需要求我们添加新路由。我为页面添加了这个通配符路由到functions.php:
Routes::map('/:page', function($params) {
Routes::load('routes/page.php', $params, null, 200);
});
通配符路由按预期工作,但现在我上面的 404 逻辑不再工作。当我访问不是在 WordPress 管理员中创建的页面的 URL 时,它会将我发送到其中包含随机帖子内容的页面。我对如何让它正常工作有点迷茫,很可能我最初的 404 逻辑不是处理它的正确方法。任何建议都会很棒。
我尝试使用以下代码将404.php 添加到主题文件夹:
<?php
$context = Timber::get_context();
Timber::render( array(
'views/pages/404.twig'
), $context );
不幸的是,这不起作用 - 我的网站在随机 URL 上呈现的是随机帖子的内容,而不是 404.twig 文件。
【问题讨论】:
标签: php wordpress routing timber