Главная WordPress

Обрезать название поста WordPress до заданного количества символов или слов

Иногда, в связи с теми или иными особенностями дизайна WordPress-сайта бывает необходимо обрезать название поста до определенной заданной длины. Я покажу 2 варианта решения: когда нужно укоротить заголовок по количеству символов и по количеству слов.

Ограничение заголовка по количеству символов

Сначала в файл functions.php вашего шаблона вставьте следующую функцию:

function trim_title_chars($count, $after) {
	$title = get_the_title();
	if (mb_strlen($title) > $count) $title = mb_substr($title,0,$count);
	else $after = '';
	echo $title . $after;
}

Затем в шаблоне поменяйте код, который выводит название поста — <?php the_title (); ?> — на такой:

<?php trim_title_chars(30, '...'); ?>

Здесь цифра 30 — это количество символов, до которых нужно обрезать заголовок, а  — то, что будет стоять после обрезанного текста. Можно вставить туда, например, какой-нибудь другой символ, либо вообще картинку.

Ограничение заголовка по количеству слов

В этом случае все по аналогии, только немного отличается функция.

Следующий код также нужно вставить в файл functions.php:

function trim_title_words($count, $after) {
	$title = get_the_title();
	$words = split(' ', $title);
	if (count($words) > $count) {
		array_splice($words, $count);
		$title = implode(' ', $words);
	}
	else $after = '';
	echo $title . $after;
}

После этого код заголовка поста — <?php the_title (); ?> — поменять на такой:

<?php trim_title_words (3, '…'); ?>

Здесь цифра 3 — это количество слов, до которых нужно обрезать заголовок, а  — то, что будет стоять после обрезанного текста.

Комментарии (10)

  1. Здравствуйте. Сделал ограничение заголовка по количеству символов. Код заработал, когда я убрал в mb_strlen mb_, т. е. оставил только strlen. Все заработало, но есть одна неприятность — даже когда заголовок равен или меньше указанного количества символов, все равно в конце появляется троеточие, за исключением совсем коротких заголовков. Не подскажите — почему так и можно ли это исправить?

  2. Респект за полезный материал!

  3. А как обрезать заголовок не с конца, а с начала

  4. Лучше всего оптимизировать заголовок, но так, чтобы смысл не терялся, чем его обрезать.

  5. А как бы ту же фишку применить к Предыдущим и Следующим записям, через, например?

  6. Добрый день. Спасибо за материал. А как этот отрывок заголовка сделать ссылкой и с тегом H2

    Если заголовок выводится такой конструкцией

    <?php
    		if ( is_singular() ) :
    			the_title( '<h1 class="entry-title">', '</h1>' );
    		else :
    			the_title( '<h2 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></h2>' );
    		endif;
    		if ( 'post' === get_post_type() ) :
    ?>

    При смене the_title, заголовок обрезается, но выводится простым текстом.

  7. А можно как-то обрезать с начала поста заголовок? У меня все посты начинаются с одного названия и чтобы не спамить заголовком в странице катагорий, функция былабы круто встроена.

Ваш комментарий