Как отображать ссылки в цитатах (excerpt) в WordPress?

7 сент. 2011 г., 21:16:55
Просмотры: 17K
Голосов: 6

У меня проблема с функцией the_excerpt и я нигде не могу найти ответ... Мне просто нужно, чтобы ссылки были кликабельными при отображении через the_excerpt! Должна же быть функция для этого, вместо того чтобы полагаться на плагин. Но я не могу её найти, а продвинутые плагины для цитат настолько сложные, что я не могу отыскать нужный небольшой фрагмент кода, который решает эту проблему.

0
Все ответы на вопрос 4
2
12

Вы можете использовать скрипт, который я нашел здесь: http://aaronrussell.co.uk/legacy/improving-wordpress-the_excerpt/

Я модифицировал его, чтобы показывать ссылки в анонсе, и убрал некоторые другие функции:

<?php
function keep_my_links($text) {
  global $post;
if ( '' == $text ) {
    $text = get_the_content('');
    $text = apply_filters('the_content', $text);
    $text = str_replace('\]\]\>', ']]&gt;', $text);
    $text = preg_replace('@<script[^>]*?>.*?</script>@si', '', $text);
    $text = strip_tags($text, '<a>');
  }
  return $text;
}
remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'keep_my_links');
?>

Часть, которая исправляет проблему: $text = strip_tags($text, '<a>'); вместе с remove_filter('get_the_excerpt', 'wp_trim_excerpt');

7 сент. 2011 г. 22:51:52
Комментарии

что именно делает if ( '' == $text )?

MrKainig MrKainig
19 мар. 2016 г. 15:22:17

К сожалению, ссылка на Аарона Рассела больше не работает, и на странице статей этого сайта есть ошибка в пагинации, которая не позволяет увидеть все страницы статей :(

Amy McCrobie Amy McCrobie
19 июн. 2017 г. 20:18:09
3

Этот код позволяет использовать список HTML-тегов, разделённых запятыми, в ваших отрывках, которые обычно удаляются WordPress. Протестировано на Genesis и работает.

add_filter( 'get_the_content_limit_allowedtags', 'get_the_content_limit_custom_allowedtags' );

function get_the_content_limit_custom_allowedtags() {
// Добавьте пользовательские теги в эту строку
return '<script>,<style>,<br>,<em>,<i>,<ul>,<ol>,<li>,<a>'; 
}

Источник http://daan.kortenba.ch/add-tags-to-genesis-content-limit-in-content-archives/

23 февр. 2014 г. 16:02:01
Комментарии

Брэд, не мог бы ты добавить краткое описание того, что делает твой код и как он работает. Просто скинуть код - не конструктивный ответ

Pieter Goosen Pieter Goosen
26 мая 2014 г. 09:40:36

С удовольствием, Питер. Этот код по сути позволяет использовать список HTML-тегов, разделенных запятыми, в кратких описаниях (excerpts), которые обычно удаляются WordPress. Протестировано на Genesis и работает.

Brad Dalton Brad Dalton
26 мая 2014 г. 10:00:10

Это будет работать только на сайтах, использующих Genesis, и то только при определенных настройках.

Greg Perham Greg Perham
7 июн. 2018 г. 02:21:52
4

Вы можете использовать следующий плагин, чтобы разрешить ссылки и другие HTML-теги в анонсах записей

Плагин: Show links in excerpts wordpress

Я не имею никакого отношения к данному плагину

26 мая 2014 г. 09:18:37
Комментарии

Пожалуйста, укажите вашу принадлежность к данному плагину

Pieter Goosen Pieter Goosen
26 мая 2014 г. 09:38:58

Я использую плагин Advanced Excerpts для WordPress с первого дня, как начал вести свой блог: weblogcode. Он очень удобен для пользователя. Хотя он не обновлялся, но совместим с WordPress 3.9. Я надеюсь, что автор плагина Advanced Excerpts скоро его обновит. Я просто обычный пользователь WordPress, использующий этот плагин.

user3162185 user3162185
26 мая 2014 г. 09:50:58

Я обновил ваш ответ, чтобы показать вашу принадлежность.

Pieter Goosen Pieter Goosen
26 мая 2014 г. 09:55:37

Кроме того, ответ должен быть больше, чем просто ссылка на внешний сайт. Пожалуйста, добавьте объяснение: почему это может решить проблему?

Sven Sven
26 мая 2014 г. 10:10:46
1

WordPress удаляет теги в функции wp_trim_words(), которая вызывается через get_the_excerpt(); поэтому нам нужно отфильтровать 'wp_trim_words', по сути скопировав эту функцию с одним изменением: заменить wp_strip_all_tags() на strip_tags().

Мы не хотим модифицировать другие функции, использующие wp_trim_words, поэтому добавляем наш фильтр во время выполнения get_the_excerpt() и удаляем его по завершении.

// Разрешаем ссылки в отрывках
function sg_trim_words( $text, $num_words, $more, $original_text ) {
    $text = strip_tags( $original_text, '' );
    // @See wp_trim_words в wp-includes/formatting.php
    if ( strpos( _x( 'words', 'Word count type. Do not translate!' ), 'characters' ) === 0 && preg_match( '/^utf\-?8$/i', get_option( 'blog_charset' ) ) ) {
        $text = trim( preg_replace( "/[\n\r\t ]+/", ' ', $text ), ' ' );
        preg_match_all( '/./u', $text, $words_array );
        $words_array = array_slice( $words_array[0], 0, $num_words + 1 );
        $sep = '';
    } else {
        $words_array = preg_split( "/[\n\r\t ]+/", $text, $num_words + 1, PREG_SPLIT_NO_EMPTY );
        $sep = ' ';
    }
    if ( count( $words_array ) > $num_words ) {
        array_pop( $words_array );
        $text = implode( $sep, $words_array );
        $text = $text . $more;
    } else {
        $text = implode( $sep, $words_array );
    }
    // Удаляем фильтр, чтобы не влиять на другие функции, использующие wp_trim_words
    remove_filter( 'wp_trim_words', 'sg_trim_words' );
    return $text;
}
// Хитрый подход: добавляем наш фильтр wp_trim_words во время фильтра excerpt_more, который вызывается непосредственно перед
function sg_add_trim_words_filter( $excerpt_length ) {
    add_filter( 'wp_trim_words', 'sg_trim_words', 10, 4 );
    return $excerpt_length;
}
add_filter( 'excerpt_more', 'sg_add_trim_words_filter', 1 );

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

7 июн. 2018 г. 04:10:20
Комментарии

@cybmeta Хорошее замечание. Я отредактировал свой ответ.

Greg Perham Greg Perham
7 июн. 2018 г. 21:09:13