Seguro que alguna vez lo has pensado. ¿Cómo podría conseguir abrir los enlaces de comentarios en una nueva ventana?
Y eso mismo pensó mi amiga Laura, del blog caoscero.com (un blog imperdible, si quieres poner orden en el caos de tu negocio).
Por supuesto, cuando se le ocurre alguna mejora para su blog ¿a qué mejor casa va a ir a preguntar que a la mía?
Así que se vino «pa’ca» y me pegó un silbido: » Niño, ¿y esto cómo se hace?».
Pues nada que me guste más que un buen reto. Así que me puse a investigar, cómo hacerlo de forma sencilla, teniendo en cuenta además que usa Genesis Framework. Y que desde luego podría ser buena idea añadir un atributo para que los enlaces de los comentarios de WordPress de autores, se abrieran en una nueva pestaña o ventana, y así no perder la visita en tu web.
Buscando en Google (para qué inventar la rueda si lo mismo ya esta inventada), encontré este código para añadir a tu fichero functions.php:
function comment_links_in_new_tab($text) { $return = str_replace('<a', '<a target="_blank"', $text); return $return; } add_filter('get_comment_author_link', 'comment_links_in_new_tab'); add_filter('comment_text', 'comment_links_in_new_tab');
Pero me pasaron varias cosas:
- No me gusta que se use la función php str_replace, pues al final es una especie de buscar y reemplazar, que busca una cadena de texto y la sustituye por otra, y consume muchos recursos.
- No me funcionó en Genesis Framework.
Por lo demás la veo bien hecha, y pienso que en un tema diferente a Genesis Framework podría funcionar.
También encontre un plugin,WP Open Comment Links in New Window, que soluciona el problema de abrir los comentarios de WordPress en una nueva ventana, pero añadiendo un plugin más a nuestra lista, y un javascript añadido.
De nuevo, más recursos.
Una solución que no me gusta un pelo.
Abrir los enlaces de comentarios en una nueva ventana para Genesis Framework
La solución definitiva para mí.
Lógicamente usando los «Action_hooks» y «Filter_hooks» de Genesis.
¿Recuerdas que te contaba que son esos «ganchos» que nos permiten insertar funciones personalizadas en nuestro Child Theme?
Pues resulta que hay un filter, asociado a al enlace del autor de un comentario, y que podemos usar para conseguir lo que queremos.
Así que simplemente añade estas lineas al functions.php de tu Child Theme (recuerda, solamente los basados en Genesis Framework):
//* Open comment author site in new window add_filter( 'genesis_attr_comment-author-link', 'gd_comment_author_link_attr' ); function gd_comment_author_link_attr( $attributes ) { $attributes['target'] = '_blank'; return $attributes; }
Y voilà!
Funciona.
Pero nos falta una pequeña parte, que es conseguir que los enlaces que dejan los comentaristas en en esos comentarios, también se abran en una nueva ventana.
Para eso, añade al final del functions.php, además este código:
function rt_add_link_target( $content ){ // use the <a> tag to split into segments $bits = explode( '<a ', $content ); // loop though the segments foreach( $bits as $key=>$bit ){ // find the end of each link $pos = strpos( $bit, '>' ); // check if there is an end (only fails with malformed markup) if( $pos !== false ){ // get a string with just the link's attibutes $part = substr( $bit, 0, $pos ); // for comparison, get the current site/network url $siteurl = network_site_url(); // if the site url is in the attributes, assume it's in the href and skip, also if a target is present if( strpos( $part, $siteurl ) === false && strpos( $part, 'target=' ) === false ){ // add the target attribute $bits[$key] = 'target="_blank" ' . $bits[$key]; } } } // re-assemble the content, and return it return implode( '<a ', $bits ); } add_filter( 'comment_text', 'rt_add_link_target' );
Pruébalo en este mismo blog. Deja tu comentario, y haz clic en tu nombre para ver como tu web se abre en una nueva ventana.