無法讀取及訂閱 WordPress Feed 問題修正

前幾天收到朋友的 feedback ,新站的 MUKI space* 無法訂閱 blog ,我使用 WordPress 的內建 feed 網址測試了一下,果然出現了如下圖的詭異錯誤 XML declaration allowed only at the start of the document

如果你跟我一樣碰到類似的錯誤訊息,不妨參考以下步驟檢查自己的 Blog ,並且逐一修正解決。


釐清發生的原因

在解決問題前,我們先來瞭解為什麼會發生這樣的錯誤吧!

先開啟你的 Blog feed 網址,通常都是 Blog 位置 + /feed ,像我的就是https://muki.tw/wordpress/feed,接著對著頁面按右鍵開啟原始檔,會看到以下這段 code 。

通常會發生錯誤,就是因為第 1 行沒有任何字元,這個空白字元斷行的問題,造成了 RSS 無法解析第一行,因此產生錯誤。

也就是說,正常的 RSS xml 第一行就應該是 <? xml version="1.0" encoding="UTF-8" ?>

瞭解錯誤原因後,開始來 Debug 吧!

確認檔案編碼以及空白字元

通常會造成這樣的原因,跟 php 語法有關。在 php 的開頭以及結尾,不應該有多餘的空白或是多餘的行數。另外,在佈景主題編碼的部分,也記得修改為 UTF-8 (不含 BOM ) 。

詳細的圖文教學,可以參考香腸之前寫的解決 WordPress 的 RSS 輸出錯誤問題

(當然,如果我當初照著香腸的文章解掉了 Feed 問題,我也不用再寫這一篇了 XD)

除了香腸文章提到的 functions.php 外,記得也要檢查以下這些檔案的編碼以及空白字元:

  • wp-includesfeed-rss.php
  • wp-includesfeed-rss2.php
  • wp-includesfeed-atom.php

利用插件修正 RSS 檔案

如果你手上沒有編輯器,也不知道該怎麼檢查這些檔案的字元,我們可以使用 WordPress plugin 來幫我們做修正。

  • 插件名稱: fix-rss-feed
  • 下載位置: http://wordpress.org/extend/plugins/fix-rss-feed/
  • 使用說明: 檢查檔案字元並修正,同時可以幫你解決 feed burner 燒 feed 時候出現的錯誤"Error on line 2: The processing instruction target matching "[xX][mM][lL]" is not allowed."
  • 使用方法: 啟用插件後,記得先將 WordPress 根目錄下的wp-blog-header.php檔案權限設為666,不然如果檢查出錯誤,也無法幫你寫入。設好檔案權限後,請先點選「Fix wordpress rss feed error」,他會幫你列出所有需要修正的錯誤訊息。確認沒甚麼問題的話,按下「Resotre Fix」就會開始幫你修正空白字元囉。

停用插件或降版本

到這還是有問題的話,我們可以檢查 WordPress 檔案版本是否為最新版?通常解決方法是停用插件,一個一個測試。可能是插件跟最新版本之間有衝突。或者你也可以選擇降 WordPress 版本,正體中文的舊版本可以到 WordPress | Taiwan 正體中文站下載,記得不要覆蓋到 wp-config.php 喔。

更新插件或降版本後,請再重新瀏覽 feed ,看看是否有成功? 或者是可以安裝一個清快取的插件,清除快取後再重新整理測試看看。

重新驗證你的 RSS Feed

如果重新整理了 N 百次,還是出現同樣的錯誤畫面,有可能是快取的問題,我們可以試試這個方法:重新驗證 RSS feed。
請到 Feed Validator for Atom and RSS 輸入你的部落格網址,他會自動偵測你的 Feed 位置,以及確認有沒有錯誤。

在前面這些方法都試過後,我重新整理還是一樣有錯,所以心灰意冷之餘就找到了驗證 Feed 的網站,抱著姑且一試的心態輸入發現驗證居然通過了!! 如果你跟我一樣,驗證通過,表示 Feed 應該是成功解決了,只是可能因為快取問題所以無法看到, (朋友跟我說 WordPress Feed 的快取有 12 小時的樣子)。

如果不趕時間的朋友,可以試著等半天的時間,再清除快取、重新整理瀏覽器,看看 Feed 是否有成功。
如果你很急著想要把 RSS feed 啟用,建議如果驗證成功,可以用 feedburner 將你的 Feed 給燒出來,如果有通過驗證應該是可以成功燒出 Feed。

結語

因為我到這一步就成功燒出 RSS feed 了,所以就沒有再往下去探究其他原因,如果各位碰到類似的問題,希望以上這些步驟就可以解決,如果還是不行的話,不妨先等 12 小時再重新確認 Feed 喔。

最後也歡迎大家訂閱我的 Blog,訂閱網址:http://feeds.feedburner.com/mukispace

輕鬆寫 WordPress 模組 / 選單

WordPress 的其中一個便利功能,就是可以自由地在側邊欄增添選單,而不用打開 sidebar.php 修改 → 上傳。如果大家有興趣自己製作佈景主題給他人使用,記得要將自由增添選單 (widget supported) 這個功能加上,今天就跟大家分享如何快速、輕鬆地寫出這個功能。

我們會用到的佈景檔案如下:

  • functions.php
  • sidebar.php
  • style.css

步驟一

開啟functions.php,在?> 的前面加上以下語法:

PHP
functions.php
  • name:幫側邊欄取個容易識別的名字吧
  • before_widget:側邊欄一塊一塊模組的開頭(通常會用 div 把他包起來,支援 html)
  • after_widget:側邊欄模組的結尾。
  • before_title:側邊欄模組的標題開頭。
  • after_title:側邊欄模組的標題結尾。

在這個階段我們先在 functions.php 新增好 sidebar1 這個 widget ,接下來就是要在適當的地方取出這個 sidebar1 囉。

步驟二

因為 functions.php 只是用來讓我們撰寫函式的檔案,不會有任何具體的效果。因此所有在 functions.php 寫好的函式,都要在其他 php 檔案進行呼叫的動作。而側邊欄的檔案是 sidebar.php ,所以請打開 sidebar.php 進行呼叫的動作吧!

請在要顯示這個 widget 的地方加入語法:

PHP
sidebar.php

第二行的sidebar1,就是我們在 functions.php 寫的 'name'=>'sidebar1',

這一行意思是:如果你在後台沒有使用 widget 模組;而且就算有使用,也不是放在 sidebar1 的欄位底下。那麼,就會顯示以下內容。

簡單來說,就是如果沒有啟用 widget 模組,sidebar.php 就會給你預設的一組設定,我這邊的預設設定是最新文章標題。假使你有開啟模組,裡面的內容就不會使用 sidebar.php 的預設,而會使用你拖拉的模組為準。

這設定是為了那些沒有使用模組習慣的朋友,而且在預覽佈景主題的時候,也會秀出預設設定讓大家看長甚麼樣子。所以想要設計佈景主題的朋友們,可千萬不要偷懶不寫喔。

步驟三

最後要在 style.css 設定 sidebar.php 的一些樣式啦!相信會寫佈景主題的朋友,對這些設定都已經有些瞭解,這邊就不多說了。

以下是我之前寫的側邊欄樣式,分享給大家:

CSS

修改 WordPress 留言表單的文字

WordPress 有內建的留言表單格式,如果你使用的是預設的布景主題 (例如 twentyten),表單應該會像這樣:

如果你只想簡單修改留言表單的文字、欄位大小,或簡單的微調,不用重新寫一個 comment function,而是使用 comment form 內建的參數即可。

步驟一:打開檔案

留言的表單通常都寫在 comments.php 裡,所以請打開你佈景主題的comments.php

步驟二:搜尋語法

找到$agrs = array( 語法,我們要在裡面修改表單的文字以及欄位等資訊,建議有一些 HTML 基礎再進行修改。

步驟三:設定參數

以下是參數設定,提供給大家做參考。

可以照著修改表單欄位(把英文改成中文)、以及使用 HTML 語法修改 input 設定。

PHP

通常表單欄位的字會跟著 WordPress 的語系設定,如果你使用的是正體中文語系,「comment」的字會變成「迴響」,但假使你想把「迴響」改成「留言」的話,一種方法是直接修改語系檔,另一種方法就是利用 comment form 的參數做設定。

至於像input, textarea,如果有額外需求,就可以利用上面這樣的參數設定,自己在裡面調整 HTML。

想要更進一步了解 comment form 的參數,可以參考 WordPress 官網的文件:Function Reference/ comment form