Как автоматически обрезать ссылки на предыдущий и следующий посты по длине

Как автоматически обрезать ссылки на предыдущий и следующий посты по длине | n-wp.ru
Хук, автоматически сокращающий длину ссылок на предыдущий и следующий посты. Такой способ бывает нужен тогда, когда нужно вписать ссылку в определенный элемент оформления.
👍 Научим бесплатно правильно создавать сайты на WordPress. Подробнее →

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

Как автоматически обрезать ссылки на предыдущий и следующий посты по длине

Хук — это такая хитрость, применяемая к функциям. Она позволяет забраться в код функции и на лету, без изменения системных файлов и шаблонов, внедрить в него нужные параметры. Ссылки на предыдущий и следующий посты обычно выводят стандартные функции previous_post_link и next_post_link. Нам нужно ограничить длину анкоров (текст ссылки), не трогая сами ссылки. Для этого внедрим хук — откроем файл functions.php и добавим в него следующий код:

//Модификация параметров html у ссылки
function modify_post_link ($link) {
  // добавим CSS класс
  $link = str_replace('<a ', '<a class="nav-link" ', $link);
 
  // максимальное количество символов
  $max = 60;
 
  // выделим текст ссылки
  preg_match('/<a>(.*?)</a>/uis', $link, $matches);
 
  // находим вхождение внутри тега ссылки — текст
  $title = $matches[1];
 
  // сократим, если длина больше указанной
  $new_title = mb_strlen($title) >= $max ? mb_substr($title, 0, $max - 3).'...' : $title;
 
  // возвращаем модифицированный HTML код ссылки
  return str_replace('>'.$title.''.$new_title.'<', $link);
}

// фильтр для предыдущей ссылки
add_filter('previous_post_link', 'modify_post_link');
 
// фильтр для следующей ссылки
add_filter('next_post_link', 'modify_post_link');

Этот код позволяет сократить анкор ссылки до указанного количества символов (в вышеуказанном примере это 60 символов), заменив остальное многоточием. Так же он добавляет в код ссылок определенный класс оформления, с помощью которого можно украсить такую ссылку (например, выделив другим цветом или указав другой размер шрифта).

Создай свой первый сайт на WordPress

tiaurus

Автор n-wp.ru — блога о WordPress для новичков.

Оцените автора
Добавить комментарий