Как создать ссылку "Читать далее" используя the_excerpt() на статической главной странице?
Я работаю над сайтом, который использует статическую главную страницу. На ней также отображается самая последняя запись блога. Это было достигнуто путем создания страницы и использования пользовательского шаблона страницы.
Иногда запись блога слишком длинная, поэтому я хочу использовать the_excerpt для автоматического сокращения без необходимости использования тега more.
Пока всё хорошо. Но the_excerpt фактически не создает ссылку "читать далее". Это довольно распространенная проблема, поэтому я добавил:
<?php
function new_excerpt_more($more) {
global $post;
return '... <a href="'. get_permalink($post->ID) . '">читать далее</a>.';
}
add_filter('excerpt_more', 'new_excerpt_more');
?>
в мой файл functions.php.
Я уже использовал этот код без проблем на другом сайте, но по какой-то причине в данном случае он не работает. Моя первоначальная догадка заключалась в том, что это происходит из-за вызова на статической странице.
Сайт находится по адресу http://stuandjessproductions.com. Тема - Central от QODE, и я использую пользовательскую дочернюю тему.
РЕДАКТИРОВАНИЕ
Добавляю код из шаблона страницы по запросу. Это не вся страница, а только релевантная часть для новостной записи:
<?php $query = "showposts=1&orderby='date'"; query_posts($query);?>
<?php if(have_posts()) : while ( have_posts() ) : the_post(); ?>
<a href="<?php the_permalink();?>"><?php the_post_thumbnail('home'); ?></a>
<div class="overlay">Последние новости</div>
<h4><a href="<?php the_permalink();?>"><?php the_title(); ?></a></h4>
<?php the_excerpt(); ?>
<?php endwhile; ?>
<?php endif; ?>

На странице редактирования записи, если вы заполните поле Цитата (Excerpt) каким-либо текстом, функция the_excerpt()
не добавляет ссылку "читать далее"
или ...
в конце краткого описания на фронтенде. Ссылка "читать далее" появляется только если поле Цитата (Excerpt) оставлено пустым. Это не ошибка, а стандартное поведение.
Решение заключается в том, чтобы избежать возврата ссылки "читать далее"
фильтром excerpt_more
, а использовать хук the_excerpt
для добавления ссылки "читать далее".
// excerpt_more должен возвращать пустую строку.
add_filter( 'excerpt_more', '__return_empty_string', 21 );
function wpse_134143_excerpt_more_link( $excerpt ) {
$excerpt .= sprintf(
'... <a href="%s">%s</a>.',
esc_url( get_permalink() ),
__( 'continue reading' )
);
return $excerpt;
}
add_filter( 'the_excerpt', 'wpse_134143_excerpt_more_link', 21 );
Приведённый выше код можно добавить в файл functions.php вашей темы.

Я ничего не добавлял в поле "Краткое описание" для записи и не планирую. Как я уже говорил, цель — сделать систему максимально простой в обслуживании для клиента. Текущий код действительно обрезает запись до 55 слов (или сколько там по умолчанию) и добавляет многоточие. Проблема в том, что мой обычный метод превращения этого многоточия в ссылку "Читать далее" не срабатывает.

Итак, я попробовал ваш код, и он вроде работает. Единственная проблема — появляется двойное многоточие. Сейчас это можно увидеть вживую на http://stuandjessproductions.com. Есть какие-то идеи?

Должен добавить, что я удалил свой оригинальный код из functions.php.

Я отметил этот вопрос как отвеченный, но решение все еще добавляет два тега "читать дальше". Я просто убрал многоточие из второго тега, что работает для меня, но это не совсем идеально.

@NavnishBhardwaj - 21 здесь указывает приоритет фильтра. Вы можете использовать любое положительное число больше 0.
