【问题标题】:WordPress + Timber w/ custom theme + routing - 404 page not renderingWordPress + Timber 带自定义主题 + 路由 - 404 页面未呈现
【发布时间】:2019-01-24 20:34:23
【问题描述】:

我正在使用 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 逻辑不再工作。当我访问不是在 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


    【解决方案1】:

    由于您将所有 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 本身)。如果您想要自定义 slug 前缀(例如 http://www.example.com/page/page slug),那么您需要自定义路由,例如 Routes::map('page/:page', function ($params) { })

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 1970-01-01
      • 2015-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多