Por defecto, los extractos de WordPress están configurados en 55 palabras y hay una filtro excerpt_length que le permite cambiar este valor predeterminado a su longitud de elección. Pero, ¿y si quisiera un fragmento de longitud diferente en diferentes secciones de su sitio? Por ejemplo, si está desarrollando un sitio web con varios tipos de publicaciones, es posible que desee mostrar diferentes longitudes de extractos según el tipo de publicación. Una publicación de blog puede tener un fragmento más extenso que, por ejemplo, un artículo de cartera.
Función de extracto personalizado
A continuación, encontrará una función personalizada que hemos desarrollado para ayudarlo a mostrar extractos en diferentes longitudes en WordPress. Para usar la función, simplemente agréguela a su archivo functions.php y luego puede reemplazar las funciones the_excerpt o the_content en todo su tema para que pueda diferentes longitudes de extractos.
function wpex_get_excerpt( $args = array() ) {
// Default arguments.
$defaults = array(
'post' => '',
'length' => 40,
'readmore' => false,
'readmore_text' => esc_html__( 'read more', 'text-domain' ),
'readmore_after' => '',
'custom_excerpts' => true,
'disable_more' => false,
);
// Apply filters to allow child themes mods.
$args = apply_filters( 'wpex_excerpt_defaults', $defaults );
// Parse arguments, takes the function arguments and combines them with the defaults.
$args = wp_parse_args( $args, $defaults );
// Apply filters to allow child themes mods.
$args = apply_filters( 'wpex_excerpt_args', $args );
// Extract arguments to make it easier to use below.
extract( $args );
// Get the current post.
$post = get_post( $post );
// Get the current post id.
$post_id = $post->ID;
// Check for custom excerpts.
if ( $custom_excerpts && has_excerpt( $post_id ) ) {
$output = $post->post_excerpt;
}
// No custom excerpt...so lets generate one.
else {
// Create the readmore link.
$readmore_link = '<a href="' . esc_url( get_permalink( $post_id ) ) . '" class="readmore">' . $readmore_text . $readmore_after . '</a>';
// Check for more tag and return content if it exists.
if ( ! $disable_more && strpos( $post->post_content, '<!--more-->' ) ) {
$output = apply_filters( 'the_content', get_the_content( $readmore_text . $readmore_after ) );
}
// No more tag defined so generate excerpt using wp_trim_words.
else {
// Generate an excerpt from the post content.
$output = wp_trim_words( strip_shortcodes( $post->post_content ), $length );
// Add the readmore text to the excerpt if enabled.
if ( $readmore ) {
$output .= apply_filters( 'wpex_readmore_link', $readmore_link );
}
}
}
// Apply filters and return the excerpt.
return apply_filters( 'wpex_excerpt', $output );
}
Cómo utilizar la función
Así que ahora, en lugar de usar «the_excerpt ()» en sus bucles, puede usar «wpex_excerpt ($ args)», donde $ args contiene una matriz de sus configuraciones preferidas para el extracto específico.
Ejemplo:
<?php echo wpex_get_excerpt ( $defaults = array(
'length' => 40,
'readmore' => true,
'readmore_text' => esc_html__( 'read more', 'wpex-boutique' ),
'custom_excerpts' => true,
) ); ?>
Filtros de funciones
Puede notar que nuestro fragmento incluye varias funciones apply_filters (). ¿Por qué? La razón de esto es que si está trabajando en un tema o complemento premium o gratuito para su distribución, querrá brindar a los usuarios finales la posibilidad de modificar sus extractos a través de su tema secundario si es necesario. Por ejemplo, si definió que un extracto tiene una longitud determinada para una sección del sitio, el usuario final siempre puede usar el filtro «wpex_get_excerpt_args» para cambiar el extracto a una longitud diferente o personalizar el texto o leer más