The excerpt_length WordPress PHP filter allows you to modify the maximum number of words displayed in a post excerpt.
Usage
add_filter('excerpt_length', 'your_function_name');
function your_function_name($length) {
// your custom code here
return $length;
}
Parameters
$length(int): The maximum number of words in a post excerpt. Default is 55.
More information
See WordPress Developer Resources: excerpt_length
Examples
Set excerpt length to 20 words
This example changes the maximum number of words in a post excerpt to 20.
function set_excerpt_length_to_20($length) {
return 20;
}
add_filter('excerpt_length', 'set_excerpt_length_to_20', 999);
// Output: Excerpt will be limited to 20 words.
Double the default excerpt length
This example doubles the default excerpt length to 110 words.
function double_excerpt_length($length) {
return $length * 2;
}
add_filter('excerpt_length', 'double_excerpt_length', 999);
// Output: Excerpt will be limited to 110 words.
Set excerpt length based on post category
This example sets different excerpt lengths for different post categories.
function category_based_excerpt_length($length) {
if (in_category('short')) {
return 30;
} elseif (in_category('long')) {
return 100;
}
return $length;
}
add_filter('excerpt_length', 'category_based_excerpt_length', 999);
// Output: Excerpt length will vary based on the post's category.
Set a custom excerpt length for specific post ID
This example sets a custom excerpt length of 40 words for a specific post with an ID of 123.
function custom_excerpt_length_for_post($length) {
global $post;
if ($post->ID == 123) {
return 40;
}
return $length;
}
add_filter('excerpt_length', 'custom_excerpt_length_for_post', 999);
// Output: Excerpt length for post with ID 123 will be limited to 40 words.
Set excerpt length to the value of a custom field
This example sets the excerpt length based on a custom field named ‘excerpt_length’ attached to the post.
function custom_field_based_excerpt_length($length) {
global $post;
$custom_length = get_post_meta($post->ID, 'excerpt_length', true);
if ($custom_length) {
return (int) $custom_length;
}
return $length;
}
add_filter('excerpt_length', 'custom_field_based_excerpt_length', 999);
// Output: Excerpt length will be set based on the value of the 'excerpt_length' custom field.