Небольшой хак для Wordpress 1.5.2, обрезающий ссылки на соседние посты до определённой длинны
В основном для Пепсимиста (извини за такую задержку, но в тот вечер по разным причинам руки не дошли, а потом, как всегда, времени не хватало), но может и ещё кого-нибудь заинтересует.
Wordpress – штука, конечно, хорошая, но когда автор склонен к сочинительству длинных заголовков, сслыки на предыдущий и последующий посты не всегда выглядят красиво, разваливаясь на несколько строк и пытаясь сдвинуть друг друга вниз. Ограничивать ширину дивов и получать две многострочных ссылки рядом – лучше, но всё равно некрасиво как-то.
Вот, что сделал я (сам Wordpress не пользуюсь, но поковырял его немного в поисках хорошего движка для многопользовательского блога и ради удовольствия).
Функции previous_post_link(..) и next_post_link(..) определены в файле wp-includes/templates-functions-links.php. Их и будем править, но чуть позже. Сначала добавим в конец wp-includes/templates-functions-general.php такую вот функцию:
function limit_string($string, $len)
{
if(strlen($string) <= $len) return $string;
$words = str_word_count($string, 2);
$pos=0;
foreach($words as $indx)
if($indx<$len) $pos=$indx;
if($pos == 0) $string = substr($string, 0, $len);
else $string = substr($string,0,$pos);
return rtrim($string, '!@#$^&*(;".,/?- ')."...";
}
Она сначала пытается разбить строку на слова, и обрезать её до $len символов «красиво», то есть не разрывая слова. Если не получается (а такое будет только если заголовок – одно длинное слово или что-нибудь вроде «очень-очень-...-очень длинный пост») – режет как получится.
Остаётся только чуть-чуть подправить фукнции, о которых я упоминал выше. Находим в каждой из них строки
$link = str_replace('%title', $title, $link); и исправляем их на $link = limit_string(str_replace('%title', $title, $link), 30); .
Наслаждайтесь. Значение 30 я подобрал эмпирически для дефолтной инсталляции Wordpress.
Update: Убрал из последней строки функции процент и закрывающую скобку.

![[rss]](images/rss.gif)