Бесплатные CMS > SEO оптимизация WordPress > Обрезать анонсы в Вордпресс

Как убрать многоточие в анонсе поста на WordPress

По умолчанию WordPress предлагает выводит записи на главной и в RSS либо полностью, либо автоматически созданным анонсом с многоточием в конце. Первый - приводит к многочисленным дублям. А второй (который можно включить и специальной функцией feedburner для отдачи в фид) превращает записи в нечто ужасное и неудобоваримое в плане читабельности.

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

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

В результате в RSS-ленту будут отдаваться полные посты. И в случае кросспостинга есть большая вероятность того, что в ЖЖ или лиру уйдет полный текст поста. Тут даже поисковик может задуматься о том, кто первоисточник - никому не известный стэндэлон-блог или же Живой Журнал. А если дальнейший кросспост по сервисам идет не с 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>';

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


Меню сайта

Как убрать многоточие в анонсе поста на WordPress
Как убрать многоточие в анонсе поста на WordPress