Enlazar el título de entradas de WordPress a urls externas.

Hace unos días un cliente nos pidió que, para ciertas categorías, las entradas pudieran redireccionar a direcciones (urls) externas. Esas entradas van a ser títulos de artículos de medios externos, Quieren que estén en su blog, y tener el listado de artículos y sus fechas, pero que, al pinchar en el título, te redireccione al artículo en el medio externo.

Hoy os dejamos el código que creamos para el cliente, porque no hemos encontrado nada en Internet. Por si os es útil.

Recordamos que, para poner el código en tu página, tienes que, o ponerlo en el archivo functions.php de tu tema hijo, o en un Snippet.

La base es que, además del código, vamos a poner, en cada entrada que queremos redireccionar, un campo personalizado que vamos a llamar enlace (pero cuyo nombre podemos cambiar como veremos más abajo). Ahí pondremos el enlace externo de cada entrada.

Código para enlazar el título de entradas con enlaces externos.

Este es el código que usamos.

add_action('template_redirect', 'post_redirect_smythsys');
function post_redirect_smythsys() {
    global $post;
    // puede tener nombres de categorías, slugs, o IDs
    $catArray = ['a','b','c','d'];
    if (is_single($post->ID) && has_category($catArray, $post)) {
    $field = get_post_meta($post->ID, 'enlace', true);
    if($field) wp_redirect(clean_url($field), 301);
        exit;
    }
}

Os explicamos el código:

  • Podéis poner donde pone a,b,c los nombres de categorías, IDs slugs de cuyos posts queremos redireccionar las entradas.
  • Podéis cambiar donde hemos puesto enlace el nombre del campo personalizado que vamos a crear para poner las direcciones externas.
  • Una vez activad el código, tenemos que agregar un campo personalizado en cada entrada de esa categoría, llamado enlace, y ahí pondremos el enlace externo.

Variantes del código.

Si lo que queremos es sólo redireccionar uno o varios posts pero sin categoría podemos hacer lo siguiente:



add_action('template_redirect', 'post_redirect_smythsys');
function post_redirect_smythsys() {
    global $post;
    
    if (is_single($post->ID) && ( $post->ID == xx) || ( $post->ID == xx){
    $field = get_post_meta($post->ID, 'enlace', true);
    if($field) wp_redirect(clean_url($field), 301);
        exit;
    }
}

Aquí hay que sustituir las xx por los IDs de los enlaces que queremos redirigir. Y podemos poner tantos como queramos añadiendo ·los OR, || ( $post->ID == xx)

Esperamos que el código os sea útil.