这是我的摘录代码。

// Generate custom excerpt length
function wpbx_excerpt_length($length) {
    return 300;
}
add_filter('excerpt_length', 'wpbx_excerpt_length');


如何允许类似<a> <b> <i> <br>的html

#1 楼

完整的摘录指南

我最近回答了一些有关摘录的问题,因此,我将尽我所能给出详细的解释。

PREFACE

这个答案在代码应该去哪里方面似乎引起了两个问题,答案是,这实际上取决于您以及您认为如何。有两个选项可用于放置代码(如果未明确说明):


在主题的functions.php或用作函数文件的任何文件中。请记住,当您执行此操作时,如果主题不是您自己的,则升级主题时所有更改都将丢失。
更好的方法是在子主题中使用代码。如上,在functions.php或函数相关文件中,使用插件中的代码。这是首选方法,因为这使代码可在所有主题中使用。如果您切换主题,则不必担心重写相同的代码。

我希望这可以使事情变得简单:-)

HTML标记/格式

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_excerptwp_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标签。

function wpse_allowedtags() {
// Add custom tags to this string
    return '<script>,<style>,<br>,<em>,<i>,<ul>,<ol>,<li>,<a>,<p>,<img>,<video>,<audio>'; 
}


如果需要允许所有HTML标签,即不剥离任何HTML标签标签,可以完全省略/删除strips_tags()功能。

但是要注意一点,当允许使用html标记时,这些标记将被视为单词,因此带有标记和不带有标记的摘录的单词计数将是不同的。若要更正此问题,您需要首先从实际的字数中删除这些标签,以便仅对字进行计数。

我写了一段摘录,该节将允许所有标签,仅将字计为单词,并且在设定的单词数之后完成一个句子(这样就不会在句子中途剪裁文本),并在最后一个单词后添加一个阅读更多的文本。

这是完整的代码

function wpse_allowedtags() {
    // Add custom tags to this string
        return '<script>,<style>,<br>,<em>,<i>,<ul>,<ol>,<li>,<a>,<p>,<img>,<video>,<audio>'; 
    }

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()); /*IF you need to allow just certain tags. Delete if all tags are allowed */

            //Set the excerpt word count and only break after sentence is complete.
                $excerpt_word_count = 75;
                $excerpt_length = apply_filters('excerpt_length', $excerpt_word_count); 
                $tokens = array();
                $excerptOutput = '';
                $count = 0;

                // Divide the string into tokens; HTML tags, or words, followed by any whitespace
                preg_match_all('/(<[^>]+>|[^<>\s]+)\s*/u', $wpse_excerpt, $tokens);

                foreach ($tokens[0] as $token) { 

                    if ($count >= $excerpt_length && preg_match('/[\,\;\?\.\!]\s*$/uS', $token)) { 
                    // Limit reached, continue until , ; ? . or ! occur at the end
                        $excerptOutput .= trim($token);
                        break;
                    }

                    // Add words to complete sentence
                    $count++;

                    // Append what's left of the token
                    $excerptOutput .= $token;
                }

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

                $excerpt_end = ' <a href="'. esc_url( get_permalink() ) . '">' . '&nbsp;&raquo;&nbsp;' . sprintf(__( 'Read more about: %s &nbsp;&raquo;', 'wpse' ), get_the_title()) . '</a>'; 
                $excerpt_more = apply_filters('excerpt_more', ' ' . $excerpt_end); 

                //$pos = strrpos($wpse_excerpt, '</');
                //if ($pos !== false)
                // Inside last HTML tag
                //$wpse_excerpt = substr_replace($wpse_excerpt, $excerpt_end, $pos, 0); /* Add read more next to last word */
                //else
                // After the content
                $wpse_excerpt .= $excerpt_more; /*Add read more in new paragraph */

            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的一个不错的小小的函数,它使用get_the_excerpt并将其修整为用户设置的$limit,并使用最后阅读更多链接。

您可以在模板中按以下方式调用此摘录

function 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>');
}


其中$limit是您的字数,因此节选30个单词be

echo wpse_custom_excerpts($limit);


这里只需要记住一件事,如果您将限制设置为超过55个单词,那么由于摘要的长度只有55个单词,因此只会返回55个单词。如果需要更长的摘录,请改用get_the_content

自定义摘录长度

如果只需要更改the_excerpt()的长度,则可以使用以下功能

echo wpse_custom_excerpts(30);


请记住,您需要将优先级设置为大于10,以便自定义函数在默认值之后执行。

添加了更多的链接

摘录返回的所有文本的结尾都带有讨厌的[...],该文本不可单击。要在竖线位置处添加更多的文字,请使用此功能

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


EDIT

摘录第一段

我想保持完整,所以下面是第一段后的摘录。

这是一个使HTML标签保持完整的函数,并在其中添加了“阅读更多”链接摘要的结尾,并在第一段后修剪摘要。

 function wpse_excerpt_more( $more ) {
    return ' <a class="read-more" href="'. get_permalink( get_the_ID() ) . '">' . __('Read More', 'your-text-domain') . '</a>';
}
add_filter( 'excerpt_more', 'wpse_excerpt_more' );


编辑29-10-2015

对于需要解决方法的任何人如果摘录短于所设置的字数,则在摘录后不显示更多链接,请参阅以下问答。


阅读更多标签显示在每个帖子上


评论


我到底在哪里放置此部分函数wpse_allowedtags(){//将自定义标签添加到此字符串中返回'