Как создать ссылку "Читать далее" используя the_excerpt() на статической главной странице?

11 февр. 2014 г., 05:50:07
Просмотры: 46.8K
Голосов: 10

Я работаю над сайтом, который использует статическую главную страницу. На ней также отображается самая последняя запись блога. Это было достигнуто путем создания страницы и использования пользовательского шаблона страницы.

Иногда запись блога слишком длинная, поэтому я хочу использовать 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; ?>
2
Комментарии

Какой код у шаблона страницы?

Michael Michael
11 февр. 2014 г. 11:50:27

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

convoke convoke
11 февр. 2014 г. 15:55:17
Все ответы на вопрос 1
8
18

На странице редактирования записи, если вы заполните поле Цитата (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 вашей темы.

11 февр. 2014 г. 06:03:04
Комментарии

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

convoke convoke
11 февр. 2014 г. 15:53:20

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

convoke convoke
11 февр. 2014 г. 18:28:47

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

convoke convoke
11 февр. 2014 г. 18:30:41

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

convoke convoke
13 февр. 2014 г. 21:49:22

Попробуйте обновленный код.

Shazzad Shazzad
13 февр. 2014 г. 22:15:29

Почему мы добавили 21 в этом месте?

Navnish Bhardwaj Navnish Bhardwaj
11 апр. 2018 г. 10:48:10

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

Shazzad Shazzad
11 апр. 2018 г. 16:36:10

Спасибо @Shazzad. После долгих поисков я наконец разобрался, как работает "Читать далее" вместе с Excerpt.

Pooja Mistry Pooja Mistry
10 июн. 2020 г. 12:48:01
Показать остальные 3 комментариев