Решил этот вопрос по-другому, дело в том, что $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 символов, вероятно из-за кириллицы