papilio

Записи с меткой «more»

Самый маленький плагин к 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]

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

Метки: , , , , ,