¿Cómo puedo agregar enlaces a los títulos de los widgets?

28 abr 2011, 14:38:28
Vistas: 17.8K
Votos: 5

Estoy usando tres widgets, dos de ellos son widgets predeterminados de WP (Entradas Recientes y Archivos) y el tercero es un widget personalizado que funciona como Entradas Recientes pero para un tipo de entrada personalizado específico.

Mi pregunta es ¿cómo puedo hacer que los títulos de los widgets sean enlaces clicables? Parece que WordPress no acepta HTML en el campo del título y lo elimina automáticamente. Idealmente no quiero hacer esto con un plugin aunque sé que existen opciones como Linkable Title HTML and PHP Widget. No es exactamente lo que busco.

El código para el widget personalizado que tengo hasta ahora se puede ver aquí: http://pastie.org/1847651

3
Comentarios

Ian, ¿puedes incluir el código para el widget que creaste?

EAMann EAMann
29 abr 2011 18:44:36

Acabo de actualizar mi pregunta con un enlace al código del widget. Aunque necesito agregar enlaces al título de este widget personalizado, también me gustaría agregar enlaces a los widgets predeterminados 'Entradas recientes' y 'Archivo' si es posible.

Ian Young Ian Young
29 abr 2011 18:51:38

esto está funcionando bien, gracias, aunque no puedo encontrar mis widgets de texto simple en la carpeta del plugin. Soy nuevo en todo esto... ¿dónde puedo encontrarlos? Además, ¿alguien sabe cómo convertir un nombre de categoría (que también funciona como encabezado como parte de un tema) en un enlace también? Gracias de antemano. Jac

User User
6 mar 2012 08:12:03
Todas las respuestas a la pregunta 5
3

Hacer que el título sea clicable

WordPress no permite usar código HTML en el título del widget, pero tiene los útiles parámetros $before_title y $after_title que puedes usar para manipular esto.

En tu widget, simplemente añade la primera parte del enlace (<a href="...">) al final de $before_title y la parte final del enlace (</a>) al principio de $after_title y tu título estará automáticamente enlazado.

Debes hacer esto después de extraer los argumentos en el método widget() ... así que en tu código, busca la sección:

ob_start();
extract($args);

$title = apply_filters('widget_title', empty($instance['title']) ? __('Noticias Recientes del Personal') : $instance['title'], $instance, $this->id_base);

Y añade:

$before_title .= '<a href="http://something.com">';
$after_title = '</a>' . $after_title;

¡Y así tendrás tu título enlazado!

Modificando los widgets por defecto

No puedes aplicar este método directamente a los widgets por defecto, pero hay una solución usando herencia de objetos. Simplemente define tus propios widgets personalizados que extiendan los widgets por defecto:

class My_Widget_Recent_Posts extends WP_Widget_Recent_Posts {

}

Tendrás que redefinir el nombre del widget y otros parámetros en el constructor, luego redefinir el método widget() copiando lo que ya está ahí pero aplicando nuestro truco de $before_title/$after_title mencionado anteriormente. ¡Tu nueva versión del widget por defecto tendrá títulos clicables!

29 abr 2011 20:47:02
Comentarios

¡Eso es genial, justo lo que estaba buscando! He conseguido que mi widget de Tipos de Entradas personalizados funcione con el título del enlace clicable, pero cuando se trata de extender el widget predeterminado de Entradas Recientes, aún no lo he logrado. He extendido la clase predeterminada y registrado el nuevo widget, pero no aparece en mi panel de widgets. El código que he añadido a mi archivo functions.php es: http://pastie.org/1848212

Ian Young Ian Young
29 abr 2011 21:47:05

¿Puedes ver en qué me estoy equivocando al extender la clase predeterminada del widget? He extendido la clase, renombrado el widget en el constructor y copiado los contenidos del widget predeterminado de Entradas Recientes. No hay errores, pero no aparece en el panel de Widgets. También he registrado el nuevo widget.

Ian Young Ian Young
30 abr 2011 12:57:20

Tienes $this->WP_Widget('recent-posts', __('My Recent News Posts'), $widget_ops); en el constructor. Deberías tener $this->WP_Widget('widget_my_recent_entries', __('My Recent News Posts'), $widget_ops);.

EAMann EAMann
30 abr 2011 19:54:54
1

Si los widgets predeterminados no ofrecen la funcionalidad que buscas, específicamente permitir enlaces personalizados en los títulos, lo mejor sería que escribieras los tuyos propios.

http://justintadlock.com/archives/2009/05/26/the-complete-guide-to-creating-widgets-in-wordpress-28

http://churchco.de/the-complete-guide-to-writing-a-wordpress-widget/

Esto generalmente implica escribir un plugin que agregue widgets personalizados a la pantalla de widgets. Hacer un pequeño ajuste a un widget existente es tan simple como copiar el código original e incluirlo de manera modificada en un plugin.

Los widgets predeterminados se encuentran en wp-includes/default-widgets.php

Editar Si no estás familiarizado con el código de WordPress, debes decidir si deseas familiarizarte más. Si es así, necesitas agregar un campo al formulario del widget que permita al usuario ingresar la dirección del enlace, y editar el código del widget para insertar el enlace cuando el código del widget muestre el título.

Si no deseas familiarizarte, entonces creo que no tienes suerte. Los widgets no tienen la capacidad de modificar sus funcionalidades sin modificar el código de WordPress.

28 abr 2011 15:25:44
Comentarios

Bueno, he creado un widget a partir de este ejemplo pero no estoy lo suficientemente familiarizado con el código de WP como para saber cómo modificarlo y que tenga un título clickeable. ¿Alguna sugerencia?

Ian Young Ian Young
28 abr 2011 16:06:27
0

Acabo de lanzar un plugin que permite a cualquiera añadir un enlace en los ajustes del widget. Funciona con la mayoría de plugins. Consíguelo aquí: http://wordpress.org/extend/plugins/widget-title-links/

21 dic 2012 20:17:38
1

En realidad, SÍ puedes insertar HTML directamente en el encabezado. Con un poco de programación. Revisa este artículo que te muestra cómo hacerlo:

http://ponderwell.net/2011/05/how-to-use-html-in-wordpresss-widgets-title/

3 mar 2012 06:23:25
Comentarios

¡Bienvenido a WordPress Stack Exchange, Alfred! Tenemos un FAQ útil aquí: Una respuesta debe ser más que apenas un enlace a un sitio externo. ¿Podrías añadir una explicación básica a tu respuesta?

fuxia fuxia
3 mar 2012 11:05:29
1
-1

o puedes simplemente usar un widget de texto plano que permita HTML en el contenido y dejar el título en blanco, luego agregar en la parte superior del contenido de ese widget...

<a href="yourlink"><div class="widget-title">Tu Título</div></a>
30 nov 2012 00:06:58
Comentarios

No es exactamente lo mismo. El OP quiere enlazar el título del widget, no cualquier elemento dentro del contenido del widget.

chrisguitarguy chrisguitarguy
30 nov 2012 00:53:46