Я пытаюсь создать собственный шаблон RSS-канала для сайта, которым управляет моя компания, и столкнулся с очень запутанной ошибкой, о которой хотелось бы узнать.
Во-первых, в качестве фонового контекста, после долгих поисков в Google, это метод, который я выбрал для создания шаблона RSS. (Если есть лучший подход, я весь в ушах):
- Скопируйте /wp-includes/feed-rss2.php в папку моей темы
- Укажите этот файл в качестве шаблона страницы и измените его по желанию.
- В бэкэнде WordPress создайте новую страницу, использующую приведенный выше шаблон.
Оттуда вы получаете XML-канал, отформатированный для RSS. Этот процесс, кажется, работает нормально, даже если он немного неуклюж.
Вот проблема, которая у меня возникла. Выведенный XML выглядит примерно так:
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
>
<channel>
<title>New Grocery Coupons & Online Coupons Added Daily</title>
<atom:link href="http://couponkim.dev/weekly-deals-rss/" rel="self" type="application/rss+xml" />
<link>http://couponkim.dev</link>
<description>Coupon Kim has online coupons, printable coupons, and coupon code section for Moms like me trying to save money!</description>
<lastBuildDate>Mon, 18 Apr 2011 14:51:44 +0000</lastBuildDate>
<language>en</language>
<sy:updatePeriod>hourly</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
<generator>http://wordpress.org/?v=3.1</generator>
<item>
<title>coupon-code</title>
<link>http://couponkim.dev/soap-com-coupons/coupon-code-159/</link>
<comments>http://couponkim.dev/soap-com-coupons/coupon-code-159/#comments</comments>
<pubDate>Mon, 18 Apr 2011 13:46:18 +0000</pubDate>
...
(Я обрезал вывод для релевантности.)
Когда я пытаюсь просмотреть вышеуказанное в Google Chrome, я получаю следующее сообщение об ошибке:
error on line 12 at column 30: xmlParseEntityRef: no name
Мое предположение состоит в том, что амперсанд вызывает проблемы, хотя, честно говоря, на данный момент это все еще предположение.
OK. Так вот тут начинаются странности. Я вошел в шаблон PHP и вставил этот заголовок в тег CDATA. Как ни странно, я не увидел, что это изменение отразилось на выводе, когда я обновил страницу.
Пытаясь сделать что-то попроще, я просто убил весь PHP в шаблоне внутри тегов заголовков и заменил его статическим текстом, например «Это тест». Когда я обновил страницу, я все еще не видел никаких изменений в выводе.
В тот момент я заподозрил, что какой-то кеш где-то должен работать против меня. Я отключил плагин W3 Total Cache, очистил кеш браузера (я использую Chrome) и перезапустил Apache на всякий случай. Я снова перезагрузил страницу, но изменений не увидел.
Сейчас в качестве эксперимента поменял <title></title>
теги на чтение <test></test>
и перезагрузил. На этот раз я увидел изменения.
Итак, в этот момент я подумал: «Окей, круто, наконец-то я разобрался с кешем». Я изменил строку обратно на: <title>This is a Test</title>
, но увидел вывод <title>New Grocery Coupons & Online Coupons Added Daily</title>
.
Так вот где я. Я буквально понятия не имею, в чем может быть проблема на данный момент.
Однако следует знать еще одну странную вещь. Когда я изменил <title>
теги на <test>
и увидел изменение, сделанное в строке 12, следующие теги заголовков (в канале->элемент->заголовок в строке 22) изменились на чтение — т. е. неприятный вывод из строки 12!<title>New Grocery Coupons & Online Coupons Added Daily</title>
Мое лучшее предположение состоит в том, что есть какой-то фильтр WordPress, о котором я не знаю, который работает с этим выводом, но я действительно в тупике. Любой свет, который вы, ребята, могли бы пролить на эту проблему, был бы очень признателен!
Заранее спасибо.
Второй раз это всплывает сегодня. 🙂 Вы должны использовать
add_feed()
( источник ), а не эмулировать этот материал со страницей.Что касается проблемы, которую вы описываете, я не уверен. Если задействовано кеширование, я бы попытался протестировать материал на отдельной локальной тестовой установке.
Спасибо за ответ, Рарст. Я просто попробую еще раз, используя add_feed(). Надеюсь, ошибка исчезнет так же волшебным образом, как и появилась, если я перестану полагаться на кладжи.