¿Mostrar enlaces en los extractos de WordPress?
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.

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('\]\]\>', ']]>', $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');

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/

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.

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.

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

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.

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.
