Autoenlazar URLs

url clicable

WordPress tiene la fea buena costumbre de que si pones una URL en el contenido de una entrada o comentario aparece como texto plano, no se convierte automáticamente en un enlace, no sale «manita» al pasar el cursor por encima vamos.

Esto es así, principalmente, para evitar el spam en comentarios, pero también viene inactivo por defecto para el contenido de tus entradas y páginas. O sea, que poner una url así en el contenido: https://ayudawp.com no la convierte automáticamente en esto otro https://ayudawp.com.

Hay una función, incluída en el fichero /wp-includes/formatting.php, denominada make_clicable, que viene inactiva por defecto.
make_clickable wordpress

Por supuesto, puedes activarla modificando el archivo pero ya sabrás que eso nunca es recomendable, pues en cada actualización (y recuerda que ahora son automáticas) perderías la personalización.

Así que, si queremos que las URLs sean activas y no texto plano tenemos que hacerlo de otro modo … 

… Autoenlazar URLs con plugin …

Hay un plugin ya veterano que hace exactamente esto, que toda URL que aparezca en el contenido, por defecto, se convierta en un hiperenlace, que sea «clicable«. Lo mejor de todo es que dispone de una página de ajustes que nos permite controlar bastantes aspectos de esta funcionalidad, como si queremos que las URLs enlazadas abran siempre en nueva ventana o si también queremos que las URLs sean enlaces en los comentarios … o no.

auto enlazar urls wordpress plugin

Solo tienes que instalar Auto-hyperlink URLs, configurarlo a tu gusto y ya lo tienes.

… Autoenlazar URLs mediante función …

Por otro lado, también puedes añadir una función a tu plugin de personalizaciones para conseguir lo mismo, esta:

//Autoenlazar URLs
function _make_url_clickable_cb($matches) {
	$ret = '';
	$url = $matches[2];
 
	if ( empty($url) )
		return $matches[0];
	// quita lo que sobra [.,;:] de la URL
	if ( in_array(substr($url, -1), array('.', ',', ';', ':')) === true ) {
		$ret = substr($url, -1);
		$url = substr($url, 0, strlen($url)-1);
	}
	return $matches[1] . "<a href=\"$url\" rel=\"nofollow\">$url</a>" . $ret;
}
 
function _make_web_ftp_clickable_cb($matches) {
	$ret = '';
	$dest = $matches[2];
	$dest = 'http://' . $dest;
 
	if ( empty($dest) )
		return $matches[0];
	// removed trailing [,;:] from URL
	if ( in_array(substr($dest, -1), array('.', ',', ';', ':')) === true ) {
		$ret = substr($dest, -1);
		$dest = substr($dest, 0, strlen($dest)-1);
	}
	return $matches[1] . "<a href=\"$dest\" rel=\"nofollow\">$dest</a>" . $ret;
}
 
function _make_email_clickable_cb($matches) {
	$email = $matches[2] . '@' . $matches[3];
	return $matches[1] . "<a href=\"mailto:$email\">$email</a>";
}
 
function make_clickable($ret) {
	$ret = ' ' . $ret;
	// aquí se usan arras para mayor velocidad
	$ret = preg_replace_callback('#([\s>])([\w]+?://[\w\\x80-\\xff\#$%&~/.\-;:=,[email protected]\[\]+]*)#is', '_make_url_clickable_cb', $ret);
	$ret = preg_replace_callback('#([\s>])((www|ftp)\.[\w\\x80-\\xff\#$%&~/.\-;:=,[email protected]\[\]+]*)#is', '_make_web_ftp_clickable_cb', $ret);
	$ret = preg_replace_callback('#([\s>])([.0-9a-z_+-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})#i', '_make_email_clickable_cb', $ret);
 
	// aquí no hay array para que se ejecute al final, para limpiar enlaces accidentales
	$ret = preg_replace("#(<a( [^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i", "$1$3</a>", $ret);
	$ret = trim($ret);
	return $ret;
}

Guardas los cambios y ya lo tienes.

VALORA Y COMPARTE ESTE ARTÍCULO PARA MEJORAR LA CALIDAD DEL BLOG…
(1 votos, promedio: 5)

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!

AVISO: Esta publicación es de hace 3 años o más. Si es un código o un plugin podría no funcionar en las últimas versiones de WordPress, y si es una noticia podría estar ya obsoleta. Luego no digas que no te hemos avisado.

3 comentarios en “Autoenlazar URLs”

  1. Patrick Muñoz

    Gracias por el código. Tengo una duda, así cómo está el código, al picar en el enlace ¿se abriría en una nueva pestaña, o accedería a él en la misma?

    1. Alejandro Gálvez

      No. Para que los enlaces se abran automáticamente en una nueva pestaña deberías modificar la línea 13 y agregar target=»_blank» como atributo a la etiqueta A.

      Para que los enlaces FTP se abran en otra pestaña deberás hacer lo mismo en la línea 28.

      Fernando, lo que no me queda claro es cuándo se ejecutaría esta función, no veo ningún add_action o add_filter. Creo que para que esté completo el código haría falta la siguiente línea:

      add_filter( ‘the_content’, ‘make_clickable’ );

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

 

Ir arriba Ir al contenido