Actualizar BUG enlaces concatenados WordPress

3 minutos de lectura
Actualizar BUG enlaces concatenados WordPress

Tabla de Contenidos

El problema: Despues de migrar el contenido (en mi caso fue desde Joomla a WordPress) el enlace de los posts aparece concatenado con la entrada actual.

Veamos el ejemplo del problema con los enalces concatenados

Viendo el contenido de la URL «midominio.com/pagina-ejemplo/ » dentro del post de esta pagina tenemos enlaces en el texto donde el link apunta a una URL relativa a «enlace-interno/categoria-4″ hasta ahi todo bien.

En el front end se nos muestra de la siguiente forma concatenado «midominio.com/pagina-ejemplo/enlace-interno/categoria-4» luego de clicar en este enlace nos redirige correctamente a la entrada pero ya nos esta generando una redireccion 301 inecesaria.

actualizar todos los enalces de wordpress

Como actualizar y solucionar los enlaces concatenados

Para solucionarlo hay 2 formas.

Opción 1

Ya sea actualizar manualmente el enlace añadiendo / al principio por ejemplo o incluso la URL absoluta.

Opcion 2

La otra forma es en el caso de que tengas muchos posts con este problema y deseas arreglarlo de una.

Lo que vamos a hacer es implementar una nueva funcion para nuestro functions.php

Aquí está la función que puedes utilizar para añadir el dominio actual y una barra antes del enlace, convirtiéndolo en un enlace absoluto:

add_filter('the_content', 'custom_add_domain_and_slash_to_links');

function custom_add_domain_and_slash_to_links($content) {
   // Encuentra todos los enlaces relativos del contenido y añade el dominio actual y / al principio.
   $content = preg_replace_callback(
       '/<a\s+([^>]+)>/ims',
       function ($matches) {
           $href = preg_replace(
              '/href="(?!http[s]?|#|mailto)([^"]+)"/',
              'href="'.site_url('/').'$1"',
              $matches[0]
           );
           return str_replace($matches[0], $href, $matches[0]);
       },
       $content
   );
   return $content;
}

Explico lo que hace:

En lugar de simplemente buscar por <a> tags en el HTML de los posts (como lo hace la función original), preg_replace_callback es utilizado aquí para permitir una llamada a otra función (function ($matches)…) cada vez que una etiqueta <a> coincida con nuestra expresión regular. Esto nos permite entonces modificar el código HTML en consecuencia.

Para buscar enlaces relativos en lugar de cualquier enlace HTML, utilizamos una expresión regular diferente: href=»(?!http[s]?|#|mailto)([^»]+)». Esta expresión regular encuentra aquellos hrefs que no contengan las cadenas http, https, #, o mailto.

Entonces, usamos la función preg_replace dentro de la callback de preg_replace_callback. Rogyxon preg_replace, reemplazamos el href = «…» tag con su versión completa, que incluye el dominio actual (site_url(‘/’)) y una barra antes de la ruta(verificamos que no contenga http[s],mailto o # porque los link ya deberian ser absolutos).

Y por último, simplemente reemplazamos la etiqueta <a> original con nuestra etiqueta actualizada.

Mas información sobre preg_replace_callback

0 0 votos
Article Rating
Subscribirse
Notificacion de
guest
0 Comments
Feedbacks en línea
Ver todos los comentarios