【问题标题】:WordPress 404 header for custom 404 page自定义 404 页面的 WordPress 404 标头
【发布时间】:2019-11-24 10:13:44
【问题描述】:

我构建了一个简单的插件,我可以使用它来快速创建一个“漂亮”的自定义 404 页面,该页面位于 WordPress 页面区域中,可以轻松对其进行编辑。我最近发现,当 Google 网站管理员工具通知我软 404 增加时,我的插件没有发送正确的 404 not found 标头。正如您在下面的代码中看到的,我首先发送 404 Not found 标头,然后调用 301 永久重定向。

从概念上讲,我认为这应该可以工作(我已经看到它在其他 404 插件中使用过),但事实并非如此。我可以让 404 标头显示的唯一方法是,如果我在位置标头之后发送标头,但这会破坏目的,因为它显示一个空白页面。我不太确定如何在 WordPress 插件中最好地完成这项工作,我想确保我可以在 WordPress 的页面结构中完成这项工作。

函数如下:

if ($wp_query->is_404) {
    $page_title = $this->options['404_page_title'];
    $redirect_404_url = esc_url(get_permalink(get_page_by_title($page_title)));
    header("HTTP/1.0 404 Not Found");
    header("HTTP/1.1 301 Moved Permanently");
    header("Location:" . $redirect_404_url);
    die;
}

【问题讨论】:

  • 我不认为你可以使用两个header()

标签: wordpress http-headers http-status-code-404


【解决方案1】:

发送 404 标头并简单地打印出 404 页面内容,而不是重定向到您的 404 页面。

这是未经测试的,但想法是这样的......

<?php
if ($wp_query->is_404) {
    header("HTTP/1.0 404 Not Found");
    $page_title = $this->options['404_page_title'];
    // Override the current post to the 404 page
    $GLOBALS['post'] = get_page_by_title($page_title);
}

【讨论】:

  • 谢谢布雷迪!我还没有机会测试,但我会尽快通知您。
  • 该代码不起作用,但这个概念似乎不错。本周晚些时候有时间我会更深入地研究这个。
  • 在自定义 404 页面上查看此 wordpress documentation。您的模板需要调用 the_content();以显示您在 CMS 编辑器中创建的内容。
  • 如果使用全局设置帖子不起作用。您还可以使用自定义方法注册一个短代码(请参阅shortcode api),该方法使用 get_page_by_title 拉取您的页面,然后回显 $page->post_content;。您可以使用 echo do_shortcode( '[my-shortcode]' ); 在 404.php 模板中调用简码
  • 我最终得到了解决我问题的答案。感谢您为我指明正确的方向!
【解决方案2】:

我终于明白了!感谢 Brady 帮助我指明了正确的方向!

首先,我设置了一个函数来重定向到插件在 404 错误时创建的页面。然后,我创建了另一个函数,如果页面标题与插件创建的 404 页面的页面标题匹配,则向页面添加 404 标题状态。最后,我将这些函数连接到我的构造函数中。小菜一碟。 :)

404 重定向功能:

public function redirect_404() {
    global $options, $wp_query;
    if ($wp_query->is_404) {
        $page_title = $this->options['404_page_title'];
        $redirect_404_url = esc_url(get_permalink(get_page_by_title($page_title)));
        wp_redirect($redirect_404_url);
        add_action('wp', array(&$this, 'redirection'));
        exit();
    }
}

将 404 标头应用于页面功能:

public function is_page_function() {
    global $options;
    $page_title = $this->options['404_page_title'];
    if (is_page($page_title)) {
        header("Status: 404 Not Found");
    }
}

动作:

add_action('template_redirect', array( &$this, 'redirect_404' ), 0);
add_action('template_redirect', array( &$this, 'is_page_function'), 0);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 2017-09-23
    • 2011-03-27
    • 2010-11-04
    • 2012-10-26
    相关资源
    最近更新 更多