WordPress +具有自定义主题+路由的木材-404页面未呈现

时间:2018-08-17 19:04:35

标签: php wordpress routing timber

我正在使用TimberTwig创建自定义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逻辑不再起作用。当我访问的URL不是在WordPress管理员中创建的页面时,它会将我发送到其中包含随机帖子内容的页面。我对如何使其正常工作有些困惑,很可能我最初的404逻辑不是正确的处理方式。任何建议都很好。

我尝试使用以下代码将404.php添加到主题文件夹:

<?php
$context = Timber::get_context();

Timber::render( array(
'views/pages/404.twig'
), $context );

不幸的是,这没有用-我的网站使用随机URL呈现了随机帖子的内容,而不是404.twig文件。

1 个答案:

答案 0 :(得分:4)

由于将所有URL路由到'page.php',因此无法呈现'404.php'。检查URL是否首先存在并进行相应路由。在您的“ functions.php”中进行此类更改,可能会解决您的404问题。

Routes::map('/:page', function ($params) {
    $is_page_exists = get_page_by_path($params['page']);
    if ($is_page_exists) {
        Routes::load('routes/page.php', $params, null, 200);
    } else {
        Routes::load('404.php', $params, null, 404);
    }
});

然后从“ index.php”中删除404相关代码。

我不确定您为什么要添加此自定义路由,因为默认情况下,WordPress / Timber会自动处理此自定义路由( page slug 本身)。如果您希望使用自定义的条尾前缀(例如http://www.example.com/ page / page slug),则需要使用自定义的路由,例如Routes::map('page/:page', function ($params) { })