papilio

Самый маленький плагин к WordPress MU

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

Ссылка more в RSS

Но это плохо, так как подписчикам лучше давать полный текст статьи: не все заходят на сайт, и не у всех есть такая возможность (например, чтение с мобильных устройств). Чуть-чуть покопавшись в коде, я понял, как это исправить.

За 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]

После этого всё работает. Я уже обратился к разработчикам.

Связанные записи:

  1. Sitemap для WordPress MU Известно, что использование sitemap (информация в Википедии) — это в...
  2. Увеличение производительности WordPress: WP Super Cache и Lighttpd Заканчивая цикл статей по mod_magnet и lighttpd стоит упомянуть настройку...
  3. WordPress и lighttpd Мы поставили WordPress не на Apache, как это обычно бывает,...
  4. mod_magnet для WordPress MU В предыдущем посте я писал про mod_magnet в lighttpd для...

Метки: , , , , ,



Есть комментарии (5):

  1. ludmila @ 26/06/2008 в 00:03

    Интересно, а для обычного WordPressa ваш плагин подойдет?

    И как им пользоваться?

    Подскажите, пожалуйста, а то замучилась уже с этим выводом урезанных постов.

  2. Eunix @ 26/06/2008 в 12:09

    Я думаю, что для обычного 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]

  3. Eunix @ 26/06/2008 в 12:10

    А разве в обычном WordPress есть глюки? Не замечал их в версии 2.5... :)

  4. ludmila @ 27/06/2008 в 01:07

    К сожалению, ничего не получилось.

    После активации плагина, вверху страницы появился текст: /*

    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

    Увы...

  5. Eunix @ 28/06/2008 в 18:30

    Прислал вариант моего плагина вам на почту. Также советую посмотреть на плагин Full Feed.

    Да, ещё раз напишу, что это проблема версий WordPress до 2.5. Просто обновитесь...

Оставить комментарий