我构建了一个简单的插件,可以用来快速创建一个“漂亮”的自定义404页面,该页面位于可以轻松编辑的wordpress页面区域。我最近发现,当谷歌网站管理员工具告诉我,我的软件404增加时,我的插件没有发送正确的404未找到的标题。正如您在下面的代码中看到的,我首先发送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;
}
感谢您的帮助!
答案 0 :(得分: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);
}
答案 1 :(得分:0)
我终于明白了!感谢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 );