@sokollll
web dev

Почему не срабатывает функция для ограничения кол-во символов в названии постов?

Есть цикл для вывода списка постов
theme_post_thumbnail();
			if ( is_singular() ) : // проверяется, просматривается ли страница записи, если нет, срабатывает else 
						the_title( '<h1 class="entry-title">', '</h1>' );
					       else :

    //the_title('<h2 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></h2>' ); 
   //закрываем стандартный вывод названия статей
					custom_the_title($limit = 10); //вызываем свою функцию и огр. символы в названии до 10

					endif;


Вот сама функция, лежащая в functions.php

function custom_the_title($limit) {
    $title = get_the_title(); // Получаем название записи
    $link_post_tag = the_title('<h2 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></h2>' );  // формируем вывод title

    if (strlen($title) > $limit) { // Проверка кол-ва символов в названии
       

 	$title = substr($title, 0, $limit) . '...'; // Обрезаем название и добавляем многоточие
    
    }

    echo $link_post_tag  ; // Выводим ограниченное название

}


В результате функция не срабатывает и все символы отображаются без ограничений
  • Вопрос задан
  • 70 просмотров
Решения вопроса 1
@sokollll Автор вопроса
web dev
Решил этот вопрос по-другому, дело в том, что $link_post_tag действительно не меняется, даже после проверки длины символов, а меняется только $title, поэтому его и будем выводить, добавим еще html теги, так как изначально заголовок должен быть в виде ссылки на страницу поста.

В функцию добавляем параметр $before и $after, которая будет хранить html теги и сразу объявляем их внутри
function custom_the_title($limit,$before,$after) {


    $title = get_the_title(); // Получаем название записи 

    $before = '<h2 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">'; 
    $after = '</a></h2>';
   

    	if (strlen($title) > $limit) { // Проверка кол-ва символов в названии
       

 			$title =  substr($title, 0, $limit)  . '...' ; // Обрезаем название и добавляем многоточие
    
    	}

	

   
echo $before . $title . $after ; // Выводятится обрезаное
  
}


А уже в шаблоне, вызываем функцию так:
if ( is_singular() ) : // проверяется, просматривается ли страница записи, если нет срабатывает else

						the_title( '<h1 class="entry-title">', '</h1>' );
					else :


						//the_title( '<h2 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></h2>' );

							custom_the_title(30,'',''); //ставим ограничение и 2 пустых параметра 
					endif;


В результате названия всех постов ограничивается. Единственный момент, если ставить ограничение в 30 символов, то показывается 15 символов, вероятно из-за кириллицы
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы