follow up on this comment:
the excerpt is showing all the content you have
not quite, because the_excerpt is stripping all html tags, such as images, links, formatting etc from the content, so even if all words are shown, it might be interesting to see the full post.
I recently checked all possible scenarios for using the_excerpt; and you can add a ‘read-more’ for all of these scenarios, using code.
here is the text and code from my article:
When using the function ‘the_excerpt()’ in your code, WordPress by default removes all html tags, shortens the content if applicable and in this case appends those three dots … all depending on the set length limit.
There are some scenarios where no dots … get added:
– there is a hand-written excerpt;
– the cleared up content is shorter than the set lenght limit;
– there is a ‘more tag’ within the content before the set length limit.
You can customize the excerpt in some ways:
– WordPress allows to use a filter function to turn those three dots … into anything , such as a ‘read more’ link – https://developer.ww.wp.xz.cn/reference/hooks/excerpt_more/;
– WordPress allows to change the set lentgth limit with a filter function – https://developer.ww.wp.xz.cn/reference/hooks/excerpt_length/;
– and most interesting, it also allows to customize the whole excerpt with yet another filter function – https://developer.ww.wp.xz.cn/reference/hooks/get_the_excerpt/.
If no dots … are added to the end of the excerpt, the first of those filter hooks does not work, so there is no direct way to add a ‘read more’ link in those scenarios.
Luckily, there is the filter hook ‘get_the_excerpt’ which allows to append anything – we just have to distinguish between all possible scenarios to avoid adding multiple ‘read more’ links to the excerpt…
The code:
/*
* adding the 'read more' to all scenarios of excerpts when using 'the_excerpt()' function
*/
//TURNING THE TRHEE DOTS ... INTO READ MORE LINK
add_filter('excerpt_more', 'excerpt_read_more_link');
function excerpt_read_more_link( $more ) {
global $post;
return '… <span class="read-more"><a href="'. get_permalink($post->ID) . '">' . __( 'Read More', 'textdomain' ) . ' »</a></span>';
}
//ADDING THE READ MORE LINK TO ALL OTHER EXCERPTS
add_filter( 'get_the_excerpt', 'excerpt_read_more_all_cases' );
function excerpt_read_more_all_cases( $text ) {
global $post;
$raw = $post->post_content;
$excerpt_length = apply_filters( 'excerpt_length', 55 );
$raw_to_more = substr( $raw, 0, strpos( $raw, '<!--more-->' ) );
$excerpt_of_raw = wp_trim_words( $raw, $excerpt_length, '');
$excerpt_of_raw_to_more = wp_trim_words( $raw_to_more, $excerpt_length, '');
// CHECKING FOR MANUALLY WRITTEN EXCERPT
if( has_excerpt() ) {
$text .= '… <span class="read-more"><a href="'. get_permalink($post->ID) . '">' . __( ' manually done, so Read More', 'textdomain' ) . ' »</a></span>';
// CHECKING FOR EXCERPT BEING SHORT BY THE 'MORE TAG'
} elseif( strpos( $raw, '<!--more-->' ) && strlen( $excerpt_of_raw_to_more ) < strlen( $excerpt_of_raw ) ) {
$text .= '… <span class="read-more"><a href="'. get_permalink($post->ID) . '">' . __( ' cut short by \'more tag\', so Read More', 'textdomain' ) . ' »</a></span>';
// CHECKING FOR EXCERPT BEING SHORT BECAUSE OF SHORT CONTENT
} elseif( strlen( $text ) == strlen( $excerpt_of_raw ) ) {
$text .= '… <span class="read-more"><a href="'. get_permalink($post->ID) . '">' . __( ' too short for excerpt, but Read More anyway', 'textdomain' ) . ' »</a></span>';
}
return $text;
}