2015-08-17 63 views
1

我試圖掛鉤WordPress的send_headers功能,所以我可以檢查是否請求sitemap.xml。這樣,我可以提供一個自定義的PHP函數來根據WordPress的帖子和頁面自動生成XML。WordPress發送404時掛接到send_headers

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

你有沒有註冊'sitemap.xml'重寫規則? – Scuzzy

+0

你是否建議我手動修改我的.htaccess文件?我試圖避免這一點,因此掛鉤到WordPress的標題。 – Quantastical

+0

由於您規避了發送內容的常規方法,因此您可能仍需要發送'200 OK'標頭。你可以試試'header(「HTTP/1.1 200 OK」);''include'之前'嗎? – Scuzzy

回答

1

您可能仍然需要發送200 OK標頭,因爲您規避了發送內容的正常方法。

添加header("HTTP/1.1 200 OK");之前您include('sitemap.php');