Разрешить HTML в выдержке

Вот мой код выдержки.

//Создание пользовательской длины выдержки
function wpbx_excerpt_length ($ length) {
    возврат 300;
}
add_filter ('excerpt_length', 'wpbx_excerpt_length');

Как разрешить html как <a> & Л; б > & Lt; & я GT; & Lt; & уш GT;

49 голосов | спросил user32447 13 AMpSun, 13 Apr 2014 01:11:46 +040011Sunday 2014, 01:11:46

2 ответа


106

ПОЛНОЕ РУКОВОДСТВО ДЛЯ ЭКСКЕРПЦИЙ

Недавно я ответил на несколько вопросов относительно отрывков, поэтому я дам подробное объяснение, охватывающее как можно больше.

ПРЕДИСЛОВИЕ

Кажется, есть несколько вопросов, возникающих в связи с этим ответом о том, куда должен идти код, и ответ заключается в том, что это действительно зависит от вас и того, как вы считаете нужным. Есть несколько вариантов, где вы можете поместить код (если явно не указано):

  • В файле functions.php вашей темы или любом файле используется файл функций. Просто помните, когда вы это делаете, если тема не ваша, все изменения будут потеряны при обновлении темы

  • Лучше всего использовать код в дочерней теме. Как и выше, в файле functions.php или связанных с функциями функций

  • Используйте код в плагине. Это предпочтительный способ, поскольку это делает код доступным для всех тем. Если вы переключаете темы, вам не нужно беспокоиться о переписывании того же кода.

Я надеюсь, что это немного облегчит: -)

HTML TAGS /FORMATTING

the_excerpt () в первую очередь не принимает никаких параметров, поэтому к нему ничего нельзя передать. Это факт, что the_excerpt () обрезает содержимое до 55 слов, а все теги HTML удаляются перед возвратом текста. the_excerpt () находится в wp-includes /post-template.php . Чтобы разрешить определенные или все теги HTML в выдержке, необходимо создать новую выдержку.

Прежде всего, сначала нужно удалить исходную функцию, а затем новую функцию нужно подключить к get_the_excerpt . Обратите внимание: этот новый фрагмент по-прежнему будет вызываться как the_excerpt () в файлах шаблонов, не нужно его изменять. get_the_excerpt () находится в wp-includes /post-template.php .

В выдержке используется wp_trim_excerpt , чтобы вернуть обрезанный текст, поэтому нам нужно сначала удалить wp_trim_excerpt из фильтра выдержки. wp_trim_excerpt () находится в wp-includes /formatting.php , строка 2355. Вот как это сделать:

remove_filter ('get_the_excerpt', 'wp_trim_excerpt');

Теперь вы можете добавить свою новую выдержку в get_the_excerpt

add_filter ('get_the_excerpt', 'wpse_custom_wp_trim_excerpt');

Чтобы разрешить html-теги /форматирование, нам нужно будет указать, какие теги вам нужно разрешить. Вы можете использовать следующий оператор strip_tags для достижения этого

$ wpse_excerpt = strip_tags ($ wpse_excerpt, wpse_allowedtags ());

Второй аргумент wpse_allowedtags () - это небольшая функция, которая используется для добавления тегов the_excerpt (). Полный список допустимых тегов HTML 5 можно найти здесь здесь . Вот функция, добавьте к ней любые теги html, которые нужно разрешить /сохранить

функция wpse_allowedtags () {
//Добавление пользовательских тегов в эту строку.
    return '<script & gt ;, <style & gt ;, <br>, <i <i & gt ;, <ul & gt ;, <li & gt ;, <a & gt ;, <p> ;, & л; IMG >, & л; видео >, & л; аудио > ';
}

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

Следует отметить, что если html-теги разрешены, эти теги подсчитываются как слова, поэтому количество слов для выдержек с тегами и без тегов не будет одинаковым. Чтобы исправить это, вам нужно будет сначала удалить эти теги из фактического количества слов, чтобы подсчитать только слова.

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

Вот полный код

функция wpse_allowedtags () {
    //Добавление пользовательских тегов в эту строку.
        return '<script & gt ;, <style & gt ;, <br>, <i <i & gt ;, <ul & gt ;, <li & gt ;, <a & gt ;, <p> ;, & л; IMG >, & л; видео >, & л; аудио > ';
    }

if (! function_exists ('wpse_custom_wp_trim_excerpt')):

    function wpse_custom_wp_trim_excerpt ($ wpse_excerpt) {
    $ raw_excerpt = $ wpse_excerpt;if ('' == $ wpse_excerpt) {

            $ wpse_excerpt = get_the_content ('');
            $ wpse_excerpt = strip_shortcodes ($ wpse_excerpt);
            $ wpse_excerpt = apply_filters ('the_content', $ wpse_excerpt);
            $ wpse_excerpt = str_replace (']]>', ']] & gt;', $ wpse_excerpt);
            $ wpse_excerpt = strip_tags ($ wpse_excerpt, wpse_allowedtags ()); /* Если вам нужно разрешить только определенные теги. Удалить, если разрешены все теги * /

            //Устанавливаем подсчет слова выдержки и заканчиваем только после завершения предложения.
                $ excerpt_word_count = 75;
                $ excerpt_length = apply_filters ('excerpt_length', $ excerpt_word_count);
                $ tokens = array ();
                $ excerptOutput = '';
                $ count = 0;

                //Разделите строку на токены; HTML-теги или слова, за которыми следуют любые пробелы
                preg_match_all ('/(<[^>] +> | [^ <gt; \ s] +) \ s * /u', $ wpse_excerpt, $ tokens);

                foreach ($ tokens [0] как $ токен) {

                    if ($ count> = $ excerpt_length & & preg_match ('/[\, \; \? \. \!] \ s * $ /uS', $ токен)) {
                    //Достигнут предел, продолжаем до; ? , или ! встречаться в конце
                        $ excerptOutput. = trim ($ token);
                        ломать;
                    }

                    //Добавление слов для завершения предложения
                    $ Подсчитывать ++;

                    //Добавим, что осталось от токена
                    $ excerptOutput. = $ token;
                }

            $ wpse_excerpt = trim (force_balance_tags ($ excerptOutput));

                $ excerpt_end = '<a href = "'. esc_url (get_permalink ()). '">' , '& Амп; NBSP; & амп; RAQUO; & амп; NBSP;' , sprintf (__ ('Узнайте больше о:% s & nbsp; raquo;', 'wpse'), get_the_title ()). '& Л; /а >';
                $ excerpt_more = apply_filters ('excerpt_more', ''. $ excerpt_end);

                //$ pos = strrpos ($ wpse_excerpt, '</');
                //if ($ pos! == false)
                //Внутри последнего тега HTML
                //$ wpse_excerpt = substr_replace ($ wpse_excerpt, $ excerpt_end, $ pos, 0); /* Добавить больше рядом с последним словом * /
                //иначе
                //После содержимого
                $ wpse_excerpt. = $ excerpt_more; /* Добавить более подробно в новый пункт * /

            return $ wpse_excerpt;

        }
        return apply_filters ('wpse_custom_wp_trim_excerpt', $ wpse_excerpt, $ raw_excerpt);
    }

ENDIF;

remove_filter ('get_the_excerpt', 'wp_trim_excerpt');
add_filter ('get_the_excerpt', 'wpse_custom_wp_trim_excerpt');

Вы можете просто удалить «//» из необходимых функций.

ДЛИННЫЕ ПОКАЗАТЕЛИ

Иногда вам нужно отображать простые выдержки разной длины, и не представляется возможным написать выдержку для каждой страницы /функции /страницы. Вот небольшая небольшая функция, использующая wp_trim_words

функция wpse_custom_excerpts ($ limit) {
    return wp_trim_words (get_the_excerpt (), $ limit, '<a href = "'. esc_url (get_permalink ()). '">'. '& nbsp; & hellip;'. __ ('Read more & nbsp; & raquo; ',' wpse ').' </a> ');
}

Что делает эта небольшая функция, это взять get_the_excerpt, обрезая его до $ limit, установленного пользователем, и возвращая текст с дополнительной ссылкой в ​​конце.

Вы можете вызывать эту выдержку, как показано в шаблоне

echo wpse_custom_excerpts ($ limit);

, где $ limit будет вашим числом слов, поэтому выдержка из 30 слов будет

echo wpse_custom_excerpts (30);

Только одно, что нужно запомнить здесь, если вы установите ограничение на более чем 55 слов, будет возвращено всего 55 слов, так как выдержка составляет всего 55 слов. Если нужны более длинные отрывки, используйте get_the_content.

ДЛИНА ТАМОЖЕННОЙ ЭКСКЕРПЦИИ

Если вам просто нужно изменить длину the_excerpt (), вы можете использовать следующую функцию

function wpse_excerpt_length ($ length) {
    return 20;
}
add_filter ('excerpt_length', 'wpse_excerpt_length', 999);

Помните, что вам нужно будет установить приоритет более 10, чтобы ваша пользовательская функция выполнялась по умолчанию.

ДОБАВИТЬ ПРОЧИТАТЬ БОЛЬШЕ ССЫЛКИ

Весь текст, возвращаемый выдержкой, имеет ненавистный [...] в конце, который не доступен для кликов. Чтобы добавить больше текста в место hellips, используйте эту функцию

функция wpse_excerpt_more ($ more) {
    return '<a class = "read-more" href = "'. get_permalink (get_the_ID ()). '">' , __ ('Read More', 'your-text-domain'). '& Л; /а >';
}
add_filter ('excerpt_more', 'wpse_excerpt_more');

ИЗМЕНИТЬ

Отрывок первого абзаца

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

Вот функциякоторый хранит теги HTML в тактике, добавляет ссылку «Читать дальше» в конце выдержки и обрезает выдержку после первого абзаца.

if (! function_exists ('wpse0001_custom_wp_trim_excerpt')):

    function wpse0001_custom_wp_trim_excerpt ($ wpse0001_excerpt) {
        глобальные $ post;
        $ raw_excerpt = $ wpse0001_excerpt;
        if ('' == $ wpse0001_excerpt) {

            $ wpse0001_excerpt = get_the_content ('');
            $ wpse0001_excerpt = strip_shortcodes ($ wpse0001_excerpt);
            $ wpse0001_excerpt = apply_filters ('the_content', $ wpse0001_excerpt);
            $ wpse0001_excerpt = substr ($ wpse0001_excerpt, 0, strpos ($ wpse0001_excerpt, '</p>') + 4);
            $ wpse0001_excerpt = str_replace (']]>', ']] & gt;', $ wpse0001_excerpt);

            $ excerpt_end = '<a href = "'. esc_url (get_permalink ()). '">' , '& Амп; NBSP; & амп; RAQUO; & амп; NBSP;' , sprintf (__ ('Узнайте больше о:% s & nbsp; & raquo;', 'pietergoosen'), get_the_title ()). '& Л; /а >';
            $ excerpt_more = apply_filters ('excerpt_more', ''. $ excerpt_end);

            //$ pos = strrpos ($ wpse0001_excerpt, '</');
            //if ($ pos! == false)
            //Внутри последнего тега HTML
            //$ wpse0001_excerpt = substr_replace ($ wpse0001_excerpt, $ excerpt_end, $ pos, 0);
            //иначе
            //После содержимого
            $ wpse0001_excerpt. = $ excerpt_more;

            return $ wpse0001_excerpt;

        }
        return apply_filters ('wpse0001_custom_wp_trim_excerpt', $ wpse0001_excerpt, $ raw_excerpt);
    }

ENDIF;

remove_filter ('get_the_excerpt', 'wp_trim_excerpt');
add_filter ('get_the_excerpt', 'wpse0001_custom_wp_trim_excerpt');

EDIT 29-10-2015

Для тех, кому требуется обходной путь, чтобы не отображать ссылку на ссылку после выдержки, когда выдержка короче, чем количество заданных слов, см. следующий вопрос и ответ

ответил Pieter Goosen 13 AMpSun, 13 Apr 2014 09:30:46 +040030Sunday 2014, 09:30:46
0

Добавьте больше тегов, если вам нужно в $ allowed_tags = ...

function _20170529_excerpt ($ text) {
$ raw_excerpt = $ text;
if ('' == $ text) {
    //Получить сообщение.
    $ text = get_the_content ('');

    //Удалите все теги короткого кода из содержимого.
    $ text = strip_shortcodes ($ text);

    $ text = apply_filters ('the_content', $ text);
    $ text = str_replace (']]>', ']] & gt;', $ text);

    $ allowed_tags = '<a & gt ;, <b & gt ;, <br> <i & gt ;,;
    $ text = strip_tags ($ text, $ allowed_tags);

    $ excerpt_word_count = 55; /*** ИЗМЕНИТЬ ЭТО. измените количество слов выдержки на любое целое число, которое вам нравится *** /
    $ excerpt_length = apply_filters ('excerpt_length', $ excerpt_word_count);

    $ excerpt_end = '[...]'; /*** ИЗМЕНИТЬ ЭТО. измените выдержку на другое. *** /
    $ excerpt_more = apply_filters ('excerpt_more', ''. $ excerpt_end);

    $ words = preg_split ("/[\ n \ r \ t] + /", $ text, $ excerpt_length + 1, PREG_SPLIT_NO_EMPTY);
    if (count ($ words)> $ excerpt_length) {
        array_pop ($ слов);
        $ text = implode ('', $ words);
        $ text = $ text. $ Excerpt_more;
    } else {
        $ text = implode ('', $ words);
    }
}
return apply_filters ('wp_trim_excerpt', $ text, $ raw_excerpt);
}

От: http://bacsoftwareconsulting.com/blog/index.php/wordpress-cat/how-to-preserve-html-tags-in-wordpress-excerpt-without-a-plugin/

ответил prosti 29 Mayam17 2017, 11:21:49

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132