¿Mostrar enlaces en los extractos de WordPress?

7 sept 2011, 21:16:55
Vistas: 17K
Votos: 6

Tengo un problema con the_excerpt y no encuentro la solución en ningún lado... Simplemente quiero permitir que los enlaces sean clickeables cuando se muestran a través de the_excerpt! Debe existir una función para esto, en lugar de depender de un plugin. Pero no la encuentro y los plugins avanzados para extractos son tan complejos que no logro encontrar el fragmento pequeño que hace que esto funcione.

0
Todas las respuestas a la pregunta 4
2
12

Puedes usar el script que encontré aquí: http://aaronrussell.co.uk/legacy/improving-wordpress-the_excerpt/

Lo he modificado para mostrar enlaces en el extracto y eliminé algunas de las otras funciones:

<?php
function keep_my_links($text) {
  global $post;
if ( '' == $text ) {
    $text = get_the_content('');
    $text = apply_filters('the_content', $text);
    $text = str_replace('\]\]\>', ']]&gt;', $text);
    $text = preg_replace('@<script[^>]*?>.*?</script>@si', '', $text);
    $text = strip_tags($text, '<a>');
  }
  return $text;
}
remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'keep_my_links');
?>

La parte que lo soluciona es $text = strip_tags($text, '<a>'); junto con remove_filter('get_the_excerpt', 'wp_trim_excerpt');

7 sept 2011 22:51:52
Comentarios

what does if ( '' == $text ) ¿qué hace exactamente?

MrKainig MrKainig
19 mar 2016 15:22:17

Desafortunadamente el enlace a Aaron Russell ya no funciona y hay un error en la paginación de ese sitio en la página de artículos que impide ver todas las páginas de artículos :(

Amy McCrobie Amy McCrobie
19 jun 2017 20:18:09
3

El código básicamente permite que una lista de etiquetas HTML separadas por comas funcione en tus extractos, que normalmente son eliminados por WordPress. Probado en Genesis y funciona.

add_filter( 'get_the_content_limit_allowedtags', 'get_the_content_limit_custom_allowedtags' );

function get_the_content_limit_custom_allowedtags() {
// Agrega etiquetas personalizadas a esta cadena
return '<script>,<style>,<br>,<em>,<i>,<ul>,<ol>,<li>,<a>'; 
}

Fuente http://daan.kortenba.ch/add-tags-to-genesis-content-limit-in-content-archives/

23 feb 2014 16:02:01
Comentarios

Brad, ¿podrías agregar una pequeña descripción de lo que hace tu código y cómo funciona? Simplemente compartir el código no es una respuesta constructiva.

Pieter Goosen Pieter Goosen
26 may 2014 09:40:36

Con gusto, Pieter. Básicamente, el código permite que una lista de etiquetas HTML separadas por comas funcione en tus extractos, que normalmente son eliminadas por WordPress. Probado en Genesis y funciona.

Brad Dalton Brad Dalton
26 may 2014 10:00:10

Esto solo funcionará en sitios que usen Genesis, e incluso entonces solo con configuraciones particulares establecidas.

Greg Perham Greg Perham
7 jun 2018 02:21:52
4

Puedes usar el siguiente plugin para permitir enlaces y otras etiquetas HTML en los extractos

Plugin: Mostrar enlaces en extractos de WordPress

No tengo ninguna afiliación con este plugin

26 may 2014 09:18:37
Comentarios

Por favor, indica tu afiliación con respecto al plugin

Pieter Goosen Pieter Goosen
26 may 2014 09:38:58

Utilizo el plugin Advanced Excerpts para WordPress desde el primer día que comencé a administrar mi blog: weblogcode. Es muy fácil de usar. No ha sido actualizado pero es compatible con WordPress 3.9. Espero que el autor del plugin Advanced Excerpts lo actualice pronto. Solo soy un usuario básico de WordPress para ese plugin.

user3162185 user3162185
26 may 2014 09:50:58

He actualizado tu respuesta para mostrar tu afiliación.

Pieter Goosen Pieter Goosen
26 may 2014 09:55:37

Además, una respuesta debería ser más que solo un enlace a un sitio externo. Por favor, agrega una explicación: ¿por qué podría eso resolver el problema?

Sven Sven
26 may 2014 10:10:46
1

WordPress elimina las etiquetas en wp_trim_words(), que es llamado por get_the_excerpt(); así que tenemos que filtrar 'wp_trim_words', básicamente copiando esa función con un cambio: reemplazar wp_strip_all_tags() con strip_tags().

No queremos que otras funciones que ejecutan wp_trim_words sean modificadas, así que añadimos nuestro filtro mientras get_the_excerpt() se está ejecutando, y lo eliminamos cuando terminamos.

// Permitir enlaces en los extractos
function sg_trim_words( $text, $num_words, $more, $original_text ) {
    $text = strip_tags( $original_text, '' );
    // @See wp_trim_words en wp-includes/formatting.php
    if ( strpos( _x( 'words', 'Word count type. Do not translate!' ), 'characters' ) === 0 && preg_match( '/^utf\-?8$/i', get_option( 'blog_charset' ) ) ) {
        $text = trim( preg_replace( "/[\n\r\t ]+/", ' ', $text ), ' ' );
        preg_match_all( '/./u', $text, $words_array );
        $words_array = array_slice( $words_array[0], 0, $num_words + 1 );
        $sep = '';
    } else {
        $words_array = preg_split( "/[\n\r\t ]+/", $text, $num_words + 1, PREG_SPLIT_NO_EMPTY );
        $sep = ' ';
    }
    if ( count( $words_array ) > $num_words ) {
        array_pop( $words_array );
        $text = implode( $sep, $words_array );
        $text = $text . $more;
    } else {
        $text = implode( $sep, $words_array );
    }
    // Eliminar el filtro para no afectar otras funciones que usen wp_trim_words
    remove_filter( 'wp_trim_words', 'sg_trim_words' );
    return $text;
}
// Ser astutos: añadir nuestro filtro wp_trim_words durante excerpt_more, que se llama justo antes
function sg_add_trim_words_filter( $excerpt_length ) {
    add_filter( 'wp_trim_words', 'sg_trim_words', 10, 4 );
    return $excerpt_length;
}
add_filter( 'excerpt_more', 'sg_add_trim_words_filter', 1 );

Escribí este gist después de revisar otros métodos sugeridos, porque creo que esta es una solución más enfocada. El gist se actualizará en el futuro.

7 jun 2018 04:10:20
Comentarios

@cybmeta Buen punto. He editado mi respuesta.

Greg Perham Greg Perham
7 jun 2018 21:09:13