我正在尝试挂钩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);
我应该挂进另一个功能吗?我是否错过了我应该做的其他事情?
答案 0 :(得分:1)
您可能仍需要发送200 OK
标头,因为您正在规避发送内容的正常方法。
在header("HTTP/1.1 200 OK");
include('sitemap.php');