Самый маленький плагин к WordPress MU
У нашего WordPress MU есть небольшой глюк: даже, если в панели управления в настройках синдикации поставить, чтобы для каждой статьи показывался полный текст, всё равно он будет в RSS со ссылкой more:

Но это плохо, так как подписчикам лучше давать полный текст статьи: не все заходят на сайт, и не у всех есть такая возможность (например, чтение с мобильных устройств). Чуть-чуть покопавшись в коде, я понял, как это исправить.
За RSS2 отвечает файл wp-includes/feed-rss2.php. Первые же его строчки говорят нам что-то о нужном нам more:
[cc lang="php"]header ('Content-Type: text/xml; charset=' . get_option ('blog_charset'), true);
$more = 1;[/cc]
Решив узнать, откуда идёт переменная $more, я открыл файл wp-includes/post-template.php и обнаружил функцию, отвечающую за вывод текста, как полного, так и укороченного:
[cc lang="php"]function get_the_content ($more_link_text = '(more...)', $stripteaser = 0, $more_file = '') {
global $id, $post, $more, $single, $withcomments, $page, $pages, $multipage, $numpages;
/*
Разный код
*/
if ( count ($content) > 1 ) {
if ( $more ) {
$output .= ''.$content[1];
} else {
$output = balanceTags ($output);
if ( ! empty ($more_link_text) )
$output .= ' $more_link_text";
}
}[/cc]
Из этого кода становится ясно, зачем программисты явно указали $more = 1 в файле вывода RSS — они просто хотели, чтобы при установленной опции Показывать полный текст всё работало правильно. Однако, ничего не работает. Я подумал, что это дело в том, что переменную просто не видно, следовательно, надо создать функцию, которая изменит глобальную переменную. Не желая что-либо изменять в коде, я решил попробовать написать плагин для WordPress MU.
Просмотрев документацию по плагинам, я понял, что есть Actions и Filters: первые делают что-то до выполнения операции, а вторые меняют (фильтруют) данные. В API по Actions я нашёл нужное мне действие rss2_head, которое выполняется сразу же после заголовка RSS, но перед выводом записей. Осталось теперь только написать функцию в плагине и посмотреть результат.
В WordPress MU существует два вида плагинов: одни располагаются в папке mu-plugins и выполняются сразу же, а другие в папке plugins, и их надо включать отдельно для каждого блога. Фактически первые плагины попросту являются глобальными: именно поэтому я и создал файл wpmu_more_feed.php в папке wp-content/mu-plugins:
[cc lang="php"]function wpmu_more_feed () {
global $more;
$more = 1;
}
add_filter ('rss2_head','wpmu_more_feed');[/cc]
После этого всё работает. Я уже обратился к разработчикам.
Связанные записи:
- Sitemap для WordPress MU Известно, что использование sitemap (информация в Википедии) — это в...
- Увеличение производительности WordPress: WP Super Cache и Lighttpd Заканчивая цикл статей по mod_magnet и lighttpd стоит упомянуть настройку...
- WordPress и lighttpd Мы поставили WordPress не на Apache, как это обычно бывает,...
- mod_magnet для WordPress MU В предыдущем посте я писал про mod_magnet в lighttpd для...
Коммент.(5)
Интересно, а для обычного WordPressa ваш плагин подойдет?
И как им пользоваться?
Подскажите, пожалуйста, а то замучилась уже с этим выводом урезанных постов.
Я думаю, что для обычного WordPress подойдёт. Просто надо закинуть его в папку с плагинами. А чтобы можно было активировать, надо вставить вначале примерно такой код:
[cc lang="php"]/*
Plugin Name: No more
Plugin URI: eunix.ru
Description: Don't allow more
Author: Eunix
Version: 1.0
Author URI: eunix.ru
*/[/cc]
А разве в обычном WordPress есть глюки? Не замечал их в версии 2.5... :)
К сожалению, ничего не получилось.
После активации плагина, вверху страницы появился текст: /*
Plugin Name: No more
Plugin URI: eunix.ru
Description: Don't allow more
Author: Eunix
Version: 1.0
Author URI: eunix.ru
*/
а в RSS ленте полезли какие то ошибки:
/* Plugin Name: wp_more_feed Plugin URI: eunix.ru Description: Don't allow more Author: Eunix Version: 1.0 Author URI: eunix.ru */ function wpmu_more_feed () { global $more; $more = 1; } add_filter ('rss2_head','wpmu_more_feed');
Warning: Cannot modify header information — headers already sent by (output started at /hdd1/home/c000000119/domains/lessonsofpsychology.ru/public_html/wp-content/plugins/wp_more_feed.php:14) in /hdd1/home/c000000119/domains/lessonsofpsychology.ru/public_html/wp-includes/pluggable.php on line 391
Увы...
Прислал вариант моего плагина вам на почту. Также советую посмотреть на плагин Full Feed.
Да, ещё раз напишу, что это проблема версий WordPress до 2.5. Просто обновитесь...