How to Add Multiple Custom Excerpt Lengths In WordPress

Cómo agregar múltiples longitudes de fragmentos personalizados en WordPress

De forma predeterminada, los fragmentos de WordPress están configurados en 55 palabras y hay un filtro excerpt_length que le permite modificar este valor predeterminado de acuerdo con la longitud de su elección. Pero, ¿qué pasaría 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 fragmentos según el tipo de publicación. Una publicación de blog puede tener un fragmento más largo que, por ejemplo, un elemento de cartera.

Función de fragmento personalizado

A continuación se muestra una función personalizada que hemos desarrollado para ayudarlo a mostrar fragmentos de diferentes longitudes en WordPress. Para usar la función, simplemente agréguela a su archivo functions.php y luego puede anular las funciones the_excerpt o the_content en todo su tema para que pueda diferentes longitudes de fragmentos.

function wpex_get_excerpt( $args = array() ) {

	// Defaults
	$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
	$defaults = apply_filters( 'wpex_get_excerpt_defaults', $defaults );

	// Parse args
	$args = wp_parse_args( $args, $defaults );

	// Apply filters to args
	$args = apply_filters( 'wpex_get_excerpt_args', $defaults );

	// Extract
	extract( $args );

	// Get global post data
	if ( ! $post ) {
		global $post;
	}

	// Get post ID
	$post_id = $post->ID;

	// Check for custom excerpt
	if ( $custom_excerpts && has_excerpt( $post_id ) ) {
		$output = $post->post_excerpt;
	}

	// No custom excerpt...so lets generate one
	else {

		// Readmore link
		$readmore_link = '<a href="' . 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 excerpt
			$output = wp_trim_words( strip_shortcodes( $post->post_content ), $length );

			// Add readmore to excerpt if enabled
			if ( $readmore ) {

				$output .= apply_filters( 'wpex_readmore_link', $readmore_link );

			}

		}

	}

	// Apply filters and echo
	return apply_filters( 'wpex_get_excerpt', $output );

}

Cómo utilizar la función

Entonces, ahora, en lugar de usar “the_excerpt ()” en sus bucles, puede usar “wpex_excerpt ($ args)”, donde $ args contiene una matriz de sus parámetros preferidos para el fragmento 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 de código incluye varias funciones apply_filters (). ¿Por qué? La razón es que si está trabajando en un tema o complemento de distribución premium o gratuita, querrá brindar a los usuarios finales la opción de editar sus fragmentos a través de su tema secundario si es necesario. Por ejemplo, si establece un fragmento de una determinada longitud para una sección del sitio, el usuario final aún puede usar el filtro “wpex_get_excerpt_args” para cambiar el fragmento a una longitud diferente o personalizar el texto o leer más.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Ir arriba