¿Cómo detectar si existe un extracto manual en WordPress?

3 minutos de lectura

avatar de usuario de user28240
usuario28240

Necesito mostrar extractos de diferentes longitudes, así que uso

function custom_excerpt($length) {    
get_the_content();
... clean up and trim
return $excerpt;
}

sin embargo, quiero detectar si se ingresó un extracto manual para usarlo en lugar del personalizado. ¿Hay alguna forma de hacer esto?

Lo intenté usando

$wp_excerpt = get_the_excerpt();

Pero eso devuelve el extracto manual, y si el extracto manual está vacío, genera automáticamente un extracto de 55 caracteres, lo que no ayuda, porque siempre será “verdadero” (no se puede verificar si está vacío).

La razón para abordarlo de esta manera es porque tengo varios extractos en una sola página (diferentes longitudes), y si la longitud necesaria es más larga que el extracto de WordPress (55), quiero mostrar mi extracto, a no ser que se escribió un extracto del manual, en cuyo caso quiero mostrar eso.

Sería perfecto si pudiera simplemente

if ( manual_excerpt() == true ) {
}

Avatar de usuario de Hullen
hullen

Solo necesita reemplazar la función predeterminada de wordpress excerp_length, solo siga el código anterior, luego puede llamar a esta función personalizada y establecer la longitud:

<?php
// custom excerpt length
function custom_excerpt_length( $length = 20 ) {
   return $length;
}
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );
?>   

RESPUESTA ACTUALIZADA II

Usando dentro de una función:

<?php
function custom_excerpt( $length = 55 ) {    
    if( $post->post_excerpt ) {
        $content = get_the_excerpt();
    } else {
        $content = get_the_content();
        $content = wp_trim_words( $content , $length );
    }
    return $excerpt;
}
?>

  • Tengo varios elementos en una sola página que necesitan diferentes longitudes del extracto. ¿Hacer eso no haría que todos los extractos tuvieran la duración de la última ejecución de “add_filter”?

    – usuario28240

    12 de noviembre de 2013 a las 17:14

  • Eso también funciona, pero el problema es que si un usuario ingresa un extracto manual, nunca se usará, ¡y ese es mi mayor problema!

    – usuario28240

    12 de noviembre de 2013 a las 17:27

  • Pero, ¿si colocas este código dentro de una función? ¿Y pasar la longitud por una función param?

    – Hullen

    12 de noviembre de 2013 a las 17:31

  • No, porque el extracto manual se anularía con esto. ¡Gracias por intentarlo!

    – usuario28240

    12 de noviembre de 2013 a las 17:33

  • Ahora, esta función verifica si el usuario colocó manualmente un extracto de la publicación y lo muestra o luego recorta el contenido de la publicación. 😉

    – Hullen

    12 de noviembre de 2013 a las 18:06

Compruebe si el post_excerpt la ranura en el objeto de publicación está vacía o no:

global $post;

if( '' == $post->post_excerpt )
{
    // this post does NOT have a manual excerpt
}

Para convertir esto en una función:

function so19935351_has_manual_excerpt( $post )
{
    if( '' == $post->post_excerpt )
        return false;

    return true;
}

Esta es una pregunta antigua, pero estaba buscando esto, terminé aquí y no vi la siguiente función en las respuestas. Para saber si una publicación tiene un extracto personalizado, puede usar el tiene_extracto función:

<?php has_excerpt( $id ); ?>

Dónde $id es la identificación de la publicación. Si no se proporciona, se utilizará la identificación de la publicación actual.

¿Ha sido útil esta solución?