wp_trim_excerpt

The timeline below displays how wordpress function wp_trim_excerpt has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.4

/**
 * Generates an excerpt from the content, if needed.
 *
 * Returns a maximum of 55 words with an ellipsis appended if necessary.
 *
 * The 55-word limit can be modified by plugins/themes using the {@see 'excerpt_length'} filter
 * The ' […]' string can be modified by plugins/themes using the {@see 'excerpt_more'} filter
 *
 * @since 1.5.0
 * @since 5.2.0 Added the `$post` parameter.
 * @since 6.3.0 Removes footnotes markup from the excerpt content.
 *
 * @param string             $text Optional. The excerpt. If set to empty, an excerpt is generated.
 * @param WP_Post|object|int $post Optional. WP_Post instance or Post ID/object. Default null.
 * @return string The excerpt.
 */
function wp_trim_excerpt($text = '', $post = null)
{
    $raw_excerpt = $text;
    if ('' === trim($text)) {
        $post = get_post($post);
        $text = get_the_content('', false, $post);
        $text = strip_shortcodes($text);
        $text = excerpt_remove_blocks($text);
        $text = excerpt_remove_footnotes($text);
        /*
         * Temporarily unhook wp_filter_content_tags() since any tags
         * within the excerpt are stripped out. Modifying the tags here
         * is wasteful and can lead to bugs in the image counting logic.
         */
        $filter_image_removed = remove_filter('the_content', 'wp_filter_content_tags', 12);
        /*
         * Temporarily unhook do_blocks() since excerpt_remove_blocks( $text )
         * handles block rendering needed for excerpt.
         */
        $filter_block_removed = remove_filter('the_content', 'do_blocks', 9);
        /** This filter is documented in wp-includes/post-template.php */
        $text = apply_filters('the_content', $text);
        $text = str_replace(']]>', ']]>', $text);
        // Restore the original filter if removed.
        if ($filter_block_removed) {
            add_filter('the_content', 'do_blocks', 9);
        }
        /*
         * Only restore the filter callback if it was removed above. The logic
         * to unhook and restore only applies on the default priority of 10,
         * which is generally used for the filter callback in WordPress core.
         */
        if ($filter_image_removed) {
            add_filter('the_content', 'wp_filter_content_tags', 12);
        }
        /* translators: Maximum number of words used in a post excerpt. */
        $excerpt_length = (int) _x('55', 'excerpt_length');
        /**
         * Filters the maximum number of words in a post excerpt.
         *
         * @since 2.7.0
         *
         * @param int $number The maximum number of words. Default 55.
         */
        $excerpt_length = (int) apply_filters('excerpt_length', $excerpt_length);
        /**
         * Filters the string in the "more" link displayed after a trimmed excerpt.
         *
         * @since 2.9.0
         *
         * @param string $more_string The string shown within the more link.
         */
        $excerpt_more = apply_filters('excerpt_more', ' ' . '[…]');
        $text = wp_trim_words($text, $excerpt_length, $excerpt_more);
    }
    /**
     * Filters the trimmed excerpt string.
     *
     * @since 2.8.0
     *
     * @param string $text        The trimmed text.
     * @param string $raw_excerpt The text prior to trimming.
     */
    return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}

WordPress Version: 6.3

/**
 * Generates an excerpt from the content, if needed.
 *
 * Returns a maximum of 55 words with an ellipsis appended if necessary.
 *
 * The 55-word limit can be modified by plugins/themes using the {@see 'excerpt_length'} filter
 * The ' […]' string can be modified by plugins/themes using the {@see 'excerpt_more'} filter
 *
 * @since 1.5.0
 * @since 5.2.0 Added the `$post` parameter.
 * @since 6.3.0 Removes footnotes markup from the excerpt content.
 *
 * @param string             $text Optional. The excerpt. If set to empty, an excerpt is generated.
 * @param WP_Post|object|int $post Optional. WP_Post instance or Post ID/object. Default null.
 * @return string The excerpt.
 */
function wp_trim_excerpt($text = '', $post = null)
{
    $raw_excerpt = $text;
    if ('' === trim($text)) {
        $post = get_post($post);
        $text = get_the_content('', false, $post);
        $text = strip_shortcodes($text);
        $text = excerpt_remove_blocks($text);
        $text = excerpt_remove_footnotes($text);
        /*
         * Temporarily unhook wp_filter_content_tags() since any tags
         * within the excerpt are stripped out. Modifying the tags here
         * is wasteful and can lead to bugs in the image counting logic.
         */
        $filter_removed = remove_filter('the_content', 'wp_filter_content_tags');
        /** This filter is documented in wp-includes/post-template.php */
        $text = apply_filters('the_content', $text);
        $text = str_replace(']]>', ']]>', $text);
        /**
         * Only restore the filter callback if it was removed above. The logic
         * to unhook and restore only applies on the default priority of 10,
         * which is generally used for the filter callback in WordPress core.
         */
        if ($filter_removed) {
            add_filter('the_content', 'wp_filter_content_tags');
        }
        /* translators: Maximum number of words used in a post excerpt. */
        $excerpt_length = (int) _x('55', 'excerpt_length');
        /**
         * Filters the maximum number of words in a post excerpt.
         *
         * @since 2.7.0
         *
         * @param int $number The maximum number of words. Default 55.
         */
        $excerpt_length = (int) apply_filters('excerpt_length', $excerpt_length);
        /**
         * Filters the string in the "more" link displayed after a trimmed excerpt.
         *
         * @since 2.9.0
         *
         * @param string $more_string The string shown within the more link.
         */
        $excerpt_more = apply_filters('excerpt_more', ' ' . '[…]');
        $text = wp_trim_words($text, $excerpt_length, $excerpt_more);
    }
    /**
     * Filters the trimmed excerpt string.
     *
     * @since 2.8.0
     *
     * @param string $text        The trimmed text.
     * @param string $raw_excerpt The text prior to trimming.
     */
    return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}

WordPress Version: 5.6

/**
 * Generates an excerpt from the content, if needed.
 *
 * Returns a maximum of 55 words with an ellipsis appended if necessary.
 *
 * The 55 word limit can be modified by plugins/themes using the {@see 'excerpt_length'} filter
 * The ' […]' string can be modified by plugins/themes using the {@see 'excerpt_more'} filter
 *
 * @since 1.5.0
 * @since 5.2.0 Added the `$post` parameter.
 *
 * @param string             $text Optional. The excerpt. If set to empty, an excerpt is generated.
 * @param WP_Post|object|int $post Optional. WP_Post instance or Post ID/object. Default null.
 * @return string The excerpt.
 */
function wp_trim_excerpt($text = '', $post = null)
{
    $raw_excerpt = $text;
    if ('' === trim($text)) {
        $post = get_post($post);
        $text = get_the_content('', false, $post);
        $text = strip_shortcodes($text);
        $text = excerpt_remove_blocks($text);
        /** This filter is documented in wp-includes/post-template.php */
        $text = apply_filters('the_content', $text);
        $text = str_replace(']]>', ']]>', $text);
        /* translators: Maximum number of words used in a post excerpt. */
        $excerpt_length = (int) _x('55', 'excerpt_length');
        /**
         * Filters the maximum number of words in a post excerpt.
         *
         * @since 2.7.0
         *
         * @param int $number The maximum number of words. Default 55.
         */
        $excerpt_length = (int) apply_filters('excerpt_length', $excerpt_length);
        /**
         * Filters the string in the "more" link displayed after a trimmed excerpt.
         *
         * @since 2.9.0
         *
         * @param string $more_string The string shown within the more link.
         */
        $excerpt_more = apply_filters('excerpt_more', ' ' . '[…]');
        $text = wp_trim_words($text, $excerpt_length, $excerpt_more);
    }
    /**
     * Filters the trimmed excerpt string.
     *
     * @since 2.8.0
     *
     * @param string $text        The trimmed text.
     * @param string $raw_excerpt The text prior to trimming.
     */
    return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}

WordPress Version: 5.1

/**
 * Generates an excerpt from the content, if needed.
 *
 * Returns a maximum of 55 words with an ellipsis appended if necessary.
 *
 * The 55 word limit can be modified by plugins/themes using the {@see 'excerpt_length'} filter
 * The ' […]' string can be modified by plugins/themes using the {@see 'excerpt_more'} filter
 *
 * @since 1.5.0
 * @since 5.2.0 Added the `$post` parameter.
 *
 * @param string             $text Optional. The excerpt. If set to empty, an excerpt is generated.
 * @param WP_Post|object|int $post Optional. WP_Post instance or Post ID/object. Default null.
 * @return string The excerpt.
 */
function wp_trim_excerpt($text = '', $post = null)
{
    $raw_excerpt = $text;
    if ('' === trim($text)) {
        $post = get_post($post);
        $text = get_the_content('', false, $post);
        $text = strip_shortcodes($text);
        $text = excerpt_remove_blocks($text);
        /** This filter is documented in wp-includes/post-template.php */
        $text = apply_filters('the_content', $text);
        $text = str_replace(']]>', ']]>', $text);
        /* translators: Maximum number of words used in a post excerpt. */
        $excerpt_length = intval(_x('55', 'excerpt_length'));
        /**
         * Filters the maximum number of words in a post excerpt.
         *
         * @since 2.7.0
         *
         * @param int $number The maximum number of words. Default 55.
         */
        $excerpt_length = (int) apply_filters('excerpt_length', $excerpt_length);
        /**
         * Filters the string in the "more" link displayed after a trimmed excerpt.
         *
         * @since 2.9.0
         *
         * @param string $more_string The string shown within the more link.
         */
        $excerpt_more = apply_filters('excerpt_more', ' ' . '[…]');
        $text = wp_trim_words($text, $excerpt_length, $excerpt_more);
    }
    /**
     * Filters the trimmed excerpt string.
     *
     * @since 2.8.0
     *
     * @param string $text        The trimmed text.
     * @param string $raw_excerpt The text prior to trimming.
     */
    return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}

WordPress Version: 5.5

/**
 * Generates an excerpt from the content, if needed.
 *
 * Returns a maximum of 55 words with an ellipsis appended if necessary.
 *
 * The 55 word limit can be modified by plugins/themes using the {@see 'excerpt_length'} filter
 * The ' […]' string can be modified by plugins/themes using the {@see 'excerpt_more'} filter
 *
 * @since 1.5.0
 * @since 5.2.0 Added the `$post` parameter.
 *
 * @param string             $text Optional. The excerpt. If set to empty, an excerpt is generated.
 * @param WP_Post|object|int $post Optional. WP_Post instance or Post ID/object. Default null.
 * @return string The excerpt.
 */
function wp_trim_excerpt($text = '', $post = null)
{
    $raw_excerpt = $text;
    if ('' === $text) {
        $post = get_post($post);
        $text = get_the_content('', false, $post);
        $text = strip_shortcodes($text);
        $text = excerpt_remove_blocks($text);
        /** This filter is documented in wp-includes/post-template.php */
        $text = apply_filters('the_content', $text);
        $text = str_replace(']]>', ']]>', $text);
        /* translators: Maximum number of words used in a post excerpt. */
        $excerpt_length = intval(_x('55', 'excerpt_length'));
        /**
         * Filters the maximum number of words in a post excerpt.
         *
         * @since 2.7.0
         *
         * @param int $number The maximum number of words. Default 55.
         */
        $excerpt_length = (int) apply_filters('excerpt_length', $excerpt_length);
        /**
         * Filters the string in the "more" link displayed after a trimmed excerpt.
         *
         * @since 2.9.0
         *
         * @param string $more_string The string shown within the more link.
         */
        $excerpt_more = apply_filters('excerpt_more', ' ' . '[…]');
        $text = wp_trim_words($text, $excerpt_length, $excerpt_more);
    }
    /**
     * Filters the trimmed excerpt string.
     *
     * @since 2.8.0
     *
     * @param string $text        The trimmed text.
     * @param string $raw_excerpt The text prior to trimming.
     */
    return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}

WordPress Version: 5.3

/**
 * Generates an excerpt from the content, if needed.
 *
 * Returns a maximum of 55 words with an ellipsis appended if necessary.
 *
 * The 55 word limit can be modified by plugins/themes using the {@see 'excerpt_length'} filter
 * The ' […]' string can be modified by plugins/themes using the {@see 'excerpt_more'} filter
 *
 * @since 1.5.0
 * @since 5.2.0 Added the `$post` parameter.
 *
 * @param string             $text Optional. The excerpt. If set to empty, an excerpt is generated.
 * @param WP_Post|object|int $post Optional. WP_Post instance or Post ID/object. Default is null.
 * @return string The excerpt.
 */
function wp_trim_excerpt($text = '', $post = null)
{
    $raw_excerpt = $text;
    if ('' == $text) {
        $post = get_post($post);
        $text = get_the_content('', false, $post);
        $text = strip_shortcodes($text);
        $text = excerpt_remove_blocks($text);
        /** This filter is documented in wp-includes/post-template.php */
        $text = apply_filters('the_content', $text);
        $text = str_replace(']]>', ']]>', $text);
        /* translators: Maximum number of words used in a post excerpt. */
        $excerpt_length = intval(_x('55', 'excerpt_length'));
        /**
         * Filters the maximum number of words in a post excerpt.
         *
         * @since 2.7.0
         *
         * @param int $number The maximum number of words. Default 55.
         */
        $excerpt_length = (int) apply_filters('excerpt_length', $excerpt_length);
        /**
         * Filters the string in the "more" link displayed after a trimmed excerpt.
         *
         * @since 2.9.0
         *
         * @param string $more_string The string shown within the more link.
         */
        $excerpt_more = apply_filters('excerpt_more', ' ' . '[…]');
        $text = wp_trim_words($text, $excerpt_length, $excerpt_more);
    }
    /**
     * Filters the trimmed excerpt string.
     *
     * @since 2.8.0
     *
     * @param string $text        The trimmed text.
     * @param string $raw_excerpt The text prior to trimming.
     */
    return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}

WordPress Version: 5.2

/**
 * Generates an excerpt from the content, if needed.
 *
 * The excerpt word amount will be 55 words and if the amount is greater than
 * that, then the string ' […]' will be appended to the excerpt. If the string
 * is less than 55 words, then the content will be returned as is.
 *
 * The 55 word limit can be modified by plugins/themes using the {@see 'excerpt_length'} filter
 * The ' […]' string can be modified by plugins/themes using the {@see 'excerpt_more'} filter
 *
 * @since 1.5.0
 * @since 5.2.0 Added the `$post` parameter.
 *
 * @param string             $text Optional. The excerpt. If set to empty, an excerpt is generated.
 * @param WP_Post|object|int $post Optional. WP_Post instance or Post ID/object. Default is null.
 * @return string The excerpt.
 */
function wp_trim_excerpt($text = '', $post = null)
{
    $raw_excerpt = $text;
    if ('' == $text) {
        $post = get_post($post);
        $text = get_the_content('', false, $post);
        $text = strip_shortcodes($text);
        $text = excerpt_remove_blocks($text);
        /** This filter is documented in wp-includes/post-template.php */
        $text = apply_filters('the_content', $text);
        $text = str_replace(']]>', ']]>', $text);
        /**
         * Filters the number of words in an excerpt.
         *
         * @since 2.7.0
         *
         * @param int $number The number of words. Default 55.
         */
        $excerpt_length = apply_filters('excerpt_length', 55);
        /**
         * Filters the string in the "more" link displayed after a trimmed excerpt.
         *
         * @since 2.9.0
         *
         * @param string $more_string The string shown within the more link.
         */
        $excerpt_more = apply_filters('excerpt_more', ' ' . '[…]');
        $text = wp_trim_words($text, $excerpt_length, $excerpt_more);
    }
    /**
     * Filters the trimmed excerpt string.
     *
     * @since 2.8.0
     *
     * @param string $text        The trimmed text.
     * @param string $raw_excerpt The text prior to trimming.
     */
    return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}

WordPress Version: 5.0

/**
 * Generates an excerpt from the content, if needed.
 *
 * The excerpt word amount will be 55 words and if the amount is greater than
 * that, then the string ' […]' will be appended to the excerpt. If the string
 * is less than 55 words, then the content will be returned as is.
 *
 * The 55 word limit can be modified by plugins/themes using the {@see 'excerpt_length'} filter
 * The ' […]' string can be modified by plugins/themes using the {@see 'excerpt_more'} filter
 *
 * @since 1.5.0
 *
 * @param string $text Optional. The excerpt. If set to empty, an excerpt is generated.
 * @return string The excerpt.
 */
function wp_trim_excerpt($text = '')
{
    $raw_excerpt = $text;
    if ('' == $text) {
        $text = get_the_content('');
        $text = strip_shortcodes($text);
        $text = excerpt_remove_blocks($text);
        /** This filter is documented in wp-includes/post-template.php */
        $text = apply_filters('the_content', $text);
        $text = str_replace(']]>', ']]>', $text);
        /**
         * Filters the number of words in an excerpt.
         *
         * @since 2.7.0
         *
         * @param int $number The number of words. Default 55.
         */
        $excerpt_length = apply_filters('excerpt_length', 55);
        /**
         * Filters the string in the "more" link displayed after a trimmed excerpt.
         *
         * @since 2.9.0
         *
         * @param string $more_string The string shown within the more link.
         */
        $excerpt_more = apply_filters('excerpt_more', ' ' . '[…]');
        $text = wp_trim_words($text, $excerpt_length, $excerpt_more);
    }
    /**
     * Filters the trimmed excerpt string.
     *
     * @since 2.8.0
     *
     * @param string $text        The trimmed text.
     * @param string $raw_excerpt The text prior to trimming.
     */
    return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}

WordPress Version: 4.6

/**
 * Generates an excerpt from the content, if needed.
 *
 * The excerpt word amount will be 55 words and if the amount is greater than
 * that, then the string ' […]' will be appended to the excerpt. If the string
 * is less than 55 words, then the content will be returned as is.
 *
 * The 55 word limit can be modified by plugins/themes using the {@see 'excerpt_length'} filter
 * The ' […]' string can be modified by plugins/themes using the {@see 'excerpt_more'} filter
 *
 * @since 1.5.0
 *
 * @param string $text Optional. The excerpt. If set to empty, an excerpt is generated.
 * @return string The excerpt.
 */
function wp_trim_excerpt($text = '')
{
    $raw_excerpt = $text;
    if ('' == $text) {
        $text = get_the_content('');
        $text = strip_shortcodes($text);
        /** This filter is documented in wp-includes/post-template.php */
        $text = apply_filters('the_content', $text);
        $text = str_replace(']]>', ']]>', $text);
        /**
         * Filters the number of words in an excerpt.
         *
         * @since 2.7.0
         *
         * @param int $number The number of words. Default 55.
         */
        $excerpt_length = apply_filters('excerpt_length', 55);
        /**
         * Filters the string in the "more" link displayed after a trimmed excerpt.
         *
         * @since 2.9.0
         *
         * @param string $more_string The string shown within the more link.
         */
        $excerpt_more = apply_filters('excerpt_more', ' ' . '[…]');
        $text = wp_trim_words($text, $excerpt_length, $excerpt_more);
    }
    /**
     * Filters the trimmed excerpt string.
     *
     * @since 2.8.0
     *
     * @param string $text        The trimmed text.
     * @param string $raw_excerpt The text prior to trimming.
     */
    return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}

WordPress Version: 3.8

/**
 * Generates an excerpt from the content, if needed.
 *
 * The excerpt word amount will be 55 words and if the amount is greater than
 * that, then the string ' […]' will be appended to the excerpt. If the string
 * is less than 55 words, then the content will be returned as is.
 *
 * The 55 word limit can be modified by plugins/themes using the excerpt_length filter
 * The ' […]' string can be modified by plugins/themes using the excerpt_more filter
 *
 * @since 1.5.0
 *
 * @param string $text Optional. The excerpt. If set to empty, an excerpt is generated.
 * @return string The excerpt.
 */
function wp_trim_excerpt($text = '')
{
    $raw_excerpt = $text;
    if ('' == $text) {
        $text = get_the_content('');
        $text = strip_shortcodes($text);
        /** This filter is documented in wp-includes/post-template.php */
        $text = apply_filters('the_content', $text);
        $text = str_replace(']]>', ']]>', $text);
        /**
         * Filter the number of words in an excerpt.
         *
         * @since 2.7.0
         *
         * @param int $number The number of words. Default 55.
         */
        $excerpt_length = apply_filters('excerpt_length', 55);
        /**
         * Filter the string in the "more" link displayed after a trimmed excerpt.
         *
         * @since 2.9.0
         *
         * @param string $more_string The string shown within the more link.
         */
        $excerpt_more = apply_filters('excerpt_more', ' ' . '[…]');
        $text = wp_trim_words($text, $excerpt_length, $excerpt_more);
    }
    /**
     * Filter the trimmed excerpt string.
     *
     * @since 2.8.0
     *
     * @param string $text        The trimmed text.
     * @param string $raw_excerpt The text prior to trimming.
     */
    return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}

WordPress Version: 3.7

/**
 * Generates an excerpt from the content, if needed.
 *
 * The excerpt word amount will be 55 words and if the amount is greater than
 * that, then the string ' […]' will be appended to the excerpt. If the string
 * is less than 55 words, then the content will be returned as is.
 *
 * The 55 word limit can be modified by plugins/themes using the excerpt_length filter
 * The ' […]' string can be modified by plugins/themes using the excerpt_more filter
 *
 * @since 1.5.0
 *
 * @param string $text Optional. The excerpt. If set to empty, an excerpt is generated.
 * @return string The excerpt.
 */
function wp_trim_excerpt($text = '')
{
    $raw_excerpt = $text;
    if ('' == $text) {
        $text = get_the_content('');
        $text = strip_shortcodes($text);
        $text = apply_filters('the_content', $text);
        $text = str_replace(']]>', ']]>', $text);
        $excerpt_length = apply_filters('excerpt_length', 55);
        $excerpt_more = apply_filters('excerpt_more', ' ' . '[…]');
        $text = wp_trim_words($text, $excerpt_length, $excerpt_more);
    }
    return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}