挂钩到send_headers时WordPress发送404

时间:2015-08-17 03:12:00

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

我正在尝试挂钩WordPress的send_headers功能,以便查看是否请求了sitemap.xml。这样,我就可以提供一个自定义PHP函数来自动生成基于WordPress帖子和页面的XML。

add_action( 'send_headers', 'custom_send_headers');
if( !function_exists('custom_send_headers') ) :
    function custom_send_headers( )
    {
        global $route, $wp_query, $window_title;
        $bits = explode( "/", $_SERVER['REQUEST_URI'] );

        if( $bits[1] === 'sitemap.xml' )
        {
            if ( $wp_query->is_404 ) {
                $wp_query->is_404 = false;
            }
            include('sitemap.php');
            die();
        }
    }
endif;

一切正常,我的PHP文件包含相应的标题:

<?php header('Content-Type: application/xml'); ?>
<?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    ....
</urlset>

为什么WordPress会发送404?

我尝试使用WordPress模板,但似乎没有用。

$template = locate_template('sitemap.php');
load_template($template);

我应该挂进另一个功能吗?我是否错过了我应该做的其他事情?

1 个答案:

答案 0 :(得分:1)

您可能仍需要发送200 OK标头,因为您正在规避发送内容的正常方法。

header("HTTP/1.1 200 OK");

之前添加include('sitemap.php');