Закатываем фиды и кросспосты|Кат в RSS и LJ-кросспосте

По умолчанию Wordpress предлагает отдавать посты на глагне и в фиде либо неудобоваримой «простыней», либо утлым «анонсом» с унылым троеточием в конце. Оба метода, честно говоря, ужасны. Первый — потому что никому неохота скроллить унылые посты в своем ридере, если не хочется читать в очередной раз про Хром или влезать в чужую бдабскую свару. А второй (который можно включить и специальной функцией feedburner для отдачи в фид) превращает записи в нечто ужасное и неудобоваримое, как в плане читабельности, так и в заметности.

Лучшее решение — использование уже привычного ката, под который можно прятать все то, что надо скрыть внутри поста. При этом сам анонс будет хорошо отформатирован, понятен, и можно будет легко добавлять текст тизера, ссылки-завлекалочки внутрь блога.

По умолчанию это срабатывает при использовании псевдотега <!--more--> в тексте поста в нужном месте, а чтобы избавиться от унылых «дальше», можно легко вносить в анкор ката свой текст — вписывая его прямо перед закрывающей последовательностью. Например, так: <!--moreТысяча ссылок-->, благо движок с помощью нехитрых регэкспов это предусматривает. Все это можно делать, конечно, только в не-визуальном редакторе. Все равно он удобней.

Но вот незадача, в фид будут отдаваться полные посты (такой вот глюк). Да и в случае кросспоста есть стопроцентная вероятность того, что в ЖЖ, лиру или куда там вы кросспостите для ссылочек на себя любимого, уйдет полный текст поста. Тут даже поисковик может задуматься о том, кто первоисточник — никому не известный стэндэлон-блог или же Живой Журнал. А если дальнейший кросспост по сервисам идет не с RSS блога, а из ЖЖ, то полный текст разойдется вообще по всем Интернетам.


Исправлений в коде Wordpress будет минимум (правда, обновляться уже нежелательно), точнее все, что потребуется — одно условное выражение в соответсвующем месте.

Залазим в файл post-template.php и находим вот такой код в функции get_the_content ():

if ($more){
	$output .= '<span id="more-'.$id.'"></span>'.$content[1];

И правим его до такого состояния:

if ($more && !is_feed()){
	$output .= '<span id="more-'.$id.'"></span>'.$content[1];

В настройках («Чтение»), конечно же, устанавливаем отдачу «Полный текст». Вуаля — в фиде будет только то, что нам надо.

Однако беда в том, что небезызвестный плагин ljxp (в русификации Арсения Иванова, да и оригинал тоже) не захочет учитывать наши изменения. Точнее, если поставить в настройках «до тега more» он попробует работать, но заткнется, если вы попробуете использовать свой анкор ката. Все потому, что создатель не учел регэкспы. Его код:

if(strpos($post->post_content, "<!--more-->") === false){
	$the_event .= apply_filters('the_content', $post->post_content);
	}
	else{
	$content = explode("<!--more-->", $post->post_content, 2);
...

Должен превратиться в:

if(preg_match('/<!--more(.*?)?-->/', $post->post_content, $matches)){
	$content = explode($matches[0], $post->post_content, 2);
...
	}
	else{
	$the_event .= apply_filters('the_content', $post->post_content);
	}

Ну и, конечно, до кучи надо, чтобы в ЖЖ выводился и сам анкор ката, введущий на ваш блог, вместо унылого «Read the rest of this entry».

if (!empty($matches[1]))
	$more_link_text = strip_tags(wp_kses_no_null(trim($matches[1])));
...
	$the_event .= sprintf('<p><a href="%s#more-%s">', get_permalink($post_id), $post_id) .
	__($more_link_text.' »', LJXP_DOMAIN) .
	'</a></p>';

Все, пока блог не вырастет до того состояния, что можно будет отказаться от кросспоста — будет прекрасно работать.

В итоге получился маленький ремикс плагина LJ-crosspost ►, который можно (естественно, да) скачать на отдельной страничке. Вдруг кому понадобится.

{19 комментариев} Подписка на комментарии

а чего у тебя здесь заголовок один, а в ленте совсем другой?

Ке-ке, ты только заметил? Если посмотришь на серенькую полоску под хедером, увидишь, что каждая запись имеет заголовок и подзаголовок. Соответственно, подзаголовок более точно определяет тему и показывается только на самой странице (хотя, думаю, надо его в свежак и подписку сделать).

И хватит уже спамить записи, я жду впечатлений по ВП Тайпо.

терпения мой друг, терпения.

а подписка на каменты так и не работает

«терпение, мой друг, терпение».

Какой клиент под почту? Потому как на комментарии, оставленные мною неавторизованным — приходят. И в гмэйл, и в яндекс. Единственное, и раньше были задержки в отправке уведомлений.

клиента нету, почта перенаправляется из ukr.net на гуглевский аккаунт. в спамах нету. попробую поменять емейл подписки

чек.

а пока ты пишешь мне ответ, можешь помочь, в моем блоге в сайдбаре есть два таба, я их честно скопипастил с сайта jquery, но в сочетании с моим css'ом шаблона он ведет себя не так как надо. Я уже почти все исправил, но никак не могу прижать к нижней границе неактивный таб. Знаешь как это сделать?

На яндексе, стали резать ВПшные уведомления — саппорт отмазывается «сменой правил в отношении массовых рассылок» и «работой программистов».

Ну, у нас тут уже ночь вообще ). Не могу сказать точно, но виноват точно flora.tabs.css (для уверенности его последним подгружай в списке цссок). И скорее всего, ошибка в том, что везде высота блоков 20px, а в .ui-tabs-selected задано height: 27px; и line-height: 27px;. Попробуй поправить либо это (пропадут уголки внизу активной скорее всего), либо остальные (не факт, что все).

Хе. Обнаружила случайно (в первый раз посмотрев свой RSS), что у меня очень забавно получилось случайно и с RSS и c Livejournal.

И туда и туда, и в поле meta description отдаётся поле excerpt, которое и является анонсом поста.

При этом в RSS и так понятно, что есть больше, а в жж, если длинна excerpt'a больше, чем поста — ставится ссылочка «рид море».

У меня обычно анонс отличается просто от текста до read more.

Хотя дело вкуса и лени)

Ну, я тут не рассматривал использование эксерпта вообще. С ним вообще интересные вещи можно делать — краткое содержание поста, или перечисление рассматриваемых тем. Или реализовать фишку с комментами как здесь (я вот подумываю полностью убрать комменты на отдельную страницу).

А с wp2.7 он работает нормально?

Понятия не имею. Но если они не поправили это в 2.7, то да.

Ну вот почему у тебя на блоге нету поиска???

приходится за этой статьей лезть в яндекс и заставлять его искать по твоему сайту

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

у меня при активации ljcrossposrer remix

вылетела ошибка:

Plugin could not be activated because it triggered a fatal error.

Warning: require_once (/usr/home/stf/data/www/aboutyourself.ru//wp-includes/class-IXR.php)

[function.require-once]: failed to open stream: No such file or directory in /usr/home/stf/data/www/aboutyourself.ru/wp-content/plugins/livejournal-crossposter-remix/livejournal-crossposter-remix.php on line 73

Fatal error: require_once () [function.require]: Failed opening required '/usr/home/stf/data/www/aboutyourself.ru//wp-includes/class-IXR.php' (include_path='.:/usr/local/share/pear') in /usr/home/stf/data/www/aboutyourself.ru/wp-content/plugins/livejournal-crossposter-remix/livejournal-crossposter-remix.php on line 73

что это такое? как исправить?

у меня wordpress 2.8.4

заранее благодарен за помощь.

Сергей, спасибо за плагин, подскажите как справится с такой проблемой. Установил плагин для кросспоста, отредактировал .po, но визуально на ЖЖ при публикации новых постов ничего не поменялось. Данные перевода старые...

Спасибо за плагин, работает. Но есть глюк:

при прописывании в опции «Custom crosspost header/footer» своего текста, все кавычки (двойные или одинарные) экранируются слешем и только потом сохраняется в БД. Пришлось править запись в БД, чтобы избавиться от этих левых слешей.

WP 2.8.6, LJCR 2.3

День добрый!

Я только начинаю работать с ВордПресс.

Поставил ваш плагин. Попытался активировать, и получаю ошибку:

Warning: require_once (/home/nebacom/public_html/konstantinus.com//wp-includes/class-IXR.php)

[function.require-once]: failed to open stream: No such file or directory in /home/nebacom/public_html/konstantinus.com/wp-content/plugins/livejournal-crossposter-remix/livejournal-crossposter-remix.php on line 73

Что я делаю не так?

Заранее спасибо!

Серег, привет.

Возникла небольшая проблема с ремиксом ЖЖ кросспостера: он почему-то отдает в сообщество сразу две записи, вместо одной. Как с этим бороться и почему так происходит?

Фид берется из www.inspireme.ru

и отдается в community.livejournal.com/ru_inspire

А здесь можно оставить свое мнение ↓ Подписка на комментарии
какие-то из следующих трех полей можно оставить пустыми


нет тегам!!! **эмоция**, __ирония__, >цитата, {[код]}