Un permalink es el enlace que se utiliza para acceder a una parte específica del contenido de tu sitio.

Por ejemplo, la página principal de Kinsta está en https://kinsta.com/, nuestro blog está en https://kinsta.com/blog/ y un solo post utiliza un enlace como https://kinsta.com/blog/wordpress-widgets/.

Los permalinks también se utilizan para páginas de archivo, páginas estáticas y cualquier contenido de tu sitio que necesite tu propio URL.

En este post, te mostraremos cómo funcionan los permalinks, cómo optimizarlos para tu sitio, y cómo configurarlos a través de tu pantalla de configuración y escribiendo algún código.

¿Qué son los permalinks de WordPress?

Los permalinks de WordPress se definen en el códice oficial de WordPress como:

«Los URLs permanentes de sus publicaciones individuales en el weblog, así como las categorías y otras listas de publicaciones en el weblog».

Cada página de tu sitio (incluyendo posts, páginas, páginas de archivo y otras páginas como la 404) tendrá su propio permalink.

Así que, por ejemplo, tu página de inicio estará en yoursite.com, mientras que tu blog estará en yoursite.com/blog.

Si tienes una categoría «destacada» en tu blog, podría ser en una de varias URL:

  • yoursite.com/category/featured
  • yoursite.com/blog/featuring o just
  • yoursite.com/featured.

Los mensajes individuales también tienen su permalink. En los archivos de plantilla de tu tema, la etiqueta de plantilla the_permalink() se usará para obtener la URL de un mensaje y crear un enlace en el que se pueda hacer clic.

WordPress usa esto para obtener el enlace permanente único para el artículo individual y lo envía dentro de un elemento <a> para que pueda ser usado como un enlace en los listados de artículos de tu blog.

La belleza de tener esta etiqueta de plantilla es que sólo tienes que usar ese pedazo de código para obtener el enlace a cualquier publicación en tu sitio, y no tienes que codificar con fuerza ningún enlace a tu tema.

La diferencia entre los permalinks, las slugs y los enlaces

En este post, nos centraremos en los permalinks en detalle, pero también veremos las slugs. Entonces, ¿cuál es la diferencia entre ellas?

El permalink es el enlace completo a un post. Así que el enlace que di antes a un post de Kinsta en los widgets es https://kinsta.com/blog/wordpress-widgets/.

El slug es la parte final de ese permalink, y es única para ese post. En este caso, es  wordPress-widgets.

Ese slug se genera automáticamente para ti en base al título de un post. Y si quieres crear una slug manualmente para un post, puedes hacerlo. Te mostraré cómo (y por qué podrías querer hacerlo) más adelante en esta publicación.

¿Cómo se crean los permalinks de WordPress?

En un sitio web estático, una URL identifica un recurso por su nombre y su ruta de directorio, como se muestra en el siguiente ejemplo:

https://example.com/path/to/resource/wordpress-permalinks.html

Para tener URLs bien estructuradas sólo necesitamos un sistema de archivos bien estructurado y recursos con nombres adecuados.

Pero la web es dinámica, y estamos acostumbrados a administrar sitios web utilizando CMSs basados en bases de datos, lo que significa que los URLs contendrán una serie de parámetros cuyos valores determinan la consulta que se ejecutará contra la base de datos.

Considera el siguiente ejemplo:

https://example.com/?key1=val1&key2=val2

En esta URL verás un separador (el signo de interrogación), y un conjunto de pares clave/valor (separados por ampersand) que constituyen la cadena de consulta. La URL no cumple con los requisitos de usabilidad y accesibilidad y debería ser convertida en un permalink más significativo y amigable con el SEO.

La forma en que estas «feas» URLs se convierten en permalinks optimizados depende de tu servidor web. Si eres un usuario de Apache, se te pedirá que añadas un conjunto de directivas de reescritura en el archivo .htaccess de la carpeta raíz. Si eres un usuario de Nginx, añadirías una directiva try_files en el archivo de configuración principal.

¡Pero no te preocupes! La mayoría de las veces no se te pedirá que configures el servidor web línea por línea porque WordPress lo hará por ti.

Como usuario administrador, puedes establecer reglas de reescritura personalizadas de forma rápida y sencilla desde el panel de administración. Los usuarios avanzados y los desarrolladores pueden obtener aún más gracias a la API de reescritura de WordPress, que proporciona funciones y ganchos que llevan la personalización de permalink a un nivel superior.

Una visión general de las consultas de WordPress

Con el propósito específico de construir la consulta, ejecutarla y almacenar los resultados de la base de datos de WordPress, WordPress proporciona la clase WP_Query. Gracias a esta clase no necesitamos preocuparnos por la consulta porque WP_Query manejará automáticamente la solicitud, construirá la consulta y la ejecutará. Luego, de acuerdo a la jerarquía de plantillas, WordPress devolverá el recurso solicitado.

Fuera de la caja, WordPress admite solicitudes de publicaciones individuales, páginas, tipos de publicaciones, así como de una serie de archivos ordenados por categoría, etiqueta, fecha, autor y más.

Además, si las funcionalidades por defecto no fueran suficientes, los desarrolladores pueden construir consultas personalizadas creando nuevas instancias de la clase WP_Query (el objeto de consulta) o pasando parámetros específicos a una instancia existente de la consulta antes de su ejecución.

Los parámetros de consulta se denominan variables de consulta y se dividen en tres grupos.

Varsiables de consulta pública

Estas variables son públicas en el sentido de que están disponibles para ser utilizadas en las solicitudes públicas (es decir, los URL). Gracias a estas variables, podemos pedir publicaciones de los autores:

?author=12?
author_name=mickey

Por categoría o etiqueta:

?cat=4,5,6
?category_name=CMS
?tag=wordpress

Por fecha y hora:

?monthnum=201601
?year=2015?w=13
?day=31

Por correo o página:

?p=123
?name=hello-world
?page_id=234

Y mucho más.

Variables de consulta privada

Estas variables no están pensadas para ser añadidas a las cadenas de consulta de las URL. Pueden utilizarse para afectar a las consultas sólo dentro de un script (un plugin o un archivo functions.php de un tema).

La siguiente cadena de consulta no daría el resultado esperado:

?meta_key=city&meta_value=London

meta_key y meta_value son variables de consulta privadas que no deben ser definidas en cadenas de consulta. Deben ser pasadas a una instancia del objeto de consulta, como te mostraré más tarde.

Vease la lista completa de variables de consulta pública y privada en el Codex.

Variables de consulta personalizadas

Estas variables definidas por el usuario se pueden pasar a través de cadenas de consulta URL, de forma muy parecida a los variables de consulta pública. La principal diferencia entre las variables públicas y las personalizadas es que WordPress no manejará variables personalizados por sí mismo, y deberíamos obtener sus valores de un plugin para personalizar las consultas.

Dicho esto, volvamos a los permalinks.

Permalinks feos de WordPress y Variables de consulta

Los permalinks feos muestran la cadena de consulta, es decir, la parte del URL que contiene un conjunto de variables de consulta (la cadena de consulta) que determinará el recurso devuelto.

Configuración sencilla en la pantalla de configuración de Permalinks
Configuración sencilla en la pantalla de configuración de Permalinks

Como ejemplo, considera las siguientes URLs:

https://example.com/?cat=5
https://example.com/?cat=5,7,9

En respuesta a estos URLs, WordPress devolvería el archivo de mensajes pertenecientes a las categorías especificadas.

No estamos limitados a un solo parámetro por URL. En los siguientes ejemplos estamos construyendo consultas más complejas:

?author_name=lucy&category_name=WebDev?tag=wordpress&m=201606

En la primera cadena de consulta, nombre_de_autor y nombre_de_categoría requerirán todos los mensajes del autor especificado en la categoría WebDev. En la segunda cadena de consulta, tag y m requerirán todos los mensajes etiquetados como «wordpress» y publicados en junio de 2016.

Como puedes ver, podemos establecer más de una variable de consulta y forzar a WordPress a ejecutar consultas avanzadas con sólo añadir los pares key=valor apropiados a las cadenas de consulta.

Bonitos permalinks: Una mejor alternativa

Al activar Pretty Permalinks establecemos una estructura de URL utilizable, accesible y fácil de usar para el SEO. Comparemos las siguientes URLs:

https://example.com/?p=123
https://example.com/wordpress-permalinks/

En este ejemplo, el feo permalink muestra la variable p y su valor (el ID del post), mientras que la bonita URL muestra el slug del post.

WordPress proporciona cuatro formatos Pretty Permalink que podemos elegir en la pantalla de configuración de Permalink, como se muestra en la imagen de abajo.

Bastantes permalinks en la configuración de los permalinks
Bastantes permalinks en la configuración de los permalinks

Pero no estás limitado a los formatos predeterminados, ya que WordPress te permite personalizar el bonito formato permalink estableciendo una o más etiquetas de estructura.

Opción de estructura personalizada
Opción de estructura personalizada

Te mostraré esto en detalle más tarde en este post.

¿Por qué son importantes los permalinks?

Usar bonitos permalinks para tu sitio de WordPress tendrá dos beneficios: SEO y Experiencia de Usuario.

¿Por qué? Los motores de búsqueda usan tu URL como una indicación de lo que trata el post. Si el contenido del permalink se relaciona con el contenido de tu publicación, eso ayudará a los motores de búsqueda a determinar de qué trata tu publicación y que es legítimamente acerca de lo que dice ser.

Para UX, los bonitos permalinks son mejores porque facilitan a los usuarios el recordar y usar las URLs en tu sitio. Nadie va a recordar la URL de tu página de contacto si es yoursite.com/?p=456. Pero van a recordar yoursite.com/contact.

Permalinks, Slugs, y SEO

El sluga de la entrada es la última parte del URL de una entrada. Si has configurado los permalinks de WordPress para que se use el nombre del mensaje, el mensaje de un mensaje llamado «cómo crear bonitos permalinks» se generará automáticamente como yoursite.com/how-to-create-pretty-permalinks/.

Es un slug decente. Le dice a los usuarios de qué se trata el post y para los motores de búsqueda contiene «permalinks», que puede ser la palabra clave a la que te diriges.

Pero se puede mejorar.

Los slug deben ser lo suficientemente largas para incluir las palabras clave a las que se dirigen, pero lo suficientemente cortas para que sean memorables para los usuarios y no confundir los motores de búsqueda con un montón de palabras innecesarias (aquí está la forma de crear permalinks amigables para SEO en WordPress).

Así que un post llamado «cómo crear permalinks bonitos» podría ser mejor con un poco de bonitos permalinks, dándote yoursite.com/pretty-permalinks/. O si tienes varios posts en bonitos permalinks y quieres darle a este un mensaje específico relacionado con el hecho de que es una guía de cómo hacerlo, podrías usar create-pretty-permalinks, dándote yoursite.com/create-pretty-permalinks.

O para llevar las cosas más lejos podrías mejorar el SEO aún más incluyendo «WordPress»: example.com/create-wordpress-pretty-permalinks.

Cuando la gente mira tu enlace en un resultado de búsqueda, tampoco quieres que el resultado de la búsqueda sea tan largo que no se pueda leer todo. Abajo hay dos resultados que obtengo del blog de Kinsta cuando busco en Google ‘wordpress permalinks’.

Resultado de Google - Permalinks de WordPress
Resultado de Google – Permalinks de WordPress

Ambos tienen slugs bien optimizadas. La primera es wordpress-premalinks-url-rewriting, lo que indica que está apuntando a esas palabras clave, y la segunda es wordpress-slug, que está aún más enfocada.

Estas slugs no desperdician ninguna palabra. Le dicen a los motores de búsqueda de qué se trata el post y nada más.

Puedes optimizar tus slugs para el SEO primero seleccionando Nombre del post en la pantalla de configuración de Permalinks y luego editando manualmente el slug para cada post cuando lo escribas.

Permalinks, Slugs y UX

El uso de lindos enlaces permanentes y el uso de cortos, memorables slugs también le dará beneficios UX.

Según un post de 1999 de Jacob Nielsen, un sitio web utilizable requiere:

  • un nombre de dominio que es fácil de recordar y fácil de deletrear.
  • URLs cortas.
  • URLs fáciles de teclear.
  • URLs que visualizan la estructura del sitio.
  • URLs que son «hackables» para permitir a los usuarios pasar a niveles más altos de la arquitectura de la información al piratear el final del URL.
  • URLs persistentes que no cambian.

Una URL nunca debe cambiar, ya que puede ser almacenada y compartida de muchas maneras. Esa es la razón por la que los llamamos permalinks. Además, un URL debe ser semántico, en el sentido de ser inmediata e intuitivamente significativo para los usuarios no expertos.

Así que aunque es posible cambiar el enlace permanente de un post después de haberlo publicado, no es una buena idea. Eso es porque el permalink original puede que ya haya sido compartido. Si necesitas cambiarlo, asegúrate de seguir las mejores prácticas de redireccionamiento de WordPress.

¿Cómo cambiar la configuración de Permalink en WordPress?

En WordPress, puedes cambiar los permalinks de varias maneras:

  • Puedes editar la pantalla de configuración de Permalinks para activar bonitos permalinks, algo que deberías hacer tan pronto como configures tu sitio web.
  • Puedes editar la estructura de permalink para las etiquetas y categorías en la pantalla de Permalinks.
  • Puedes editar las slugs de los mensajes individuales cuando los creas y los editas.
  • Puedes especificar la estructura de los enlaces a los tipos de mensajes personalizados cuando los registres, eligiendo utilizar el predeterminado o anularlo.
  • Puedes escribir un plugin para modificar la forma en que los permalinks están estructurados.
  • Puedes usar redireccionamientos para obtener un enlace permanente desactualizado que apunte a uno nuevo.

Echemos un vistazo a cada uno de estos.

Edición de la configuración general de Permalink

La pantalla de configuración de los permalinks es el primer lugar donde se puede configurar los permalinks. Accede a ella a través de Configuración > Permalinks.

Pantalla de configuración de Permalink
Pantalla de configuración de Permalink

Configuración común

La primera sección trata de la configuración de los puestos individuales. Las opciones son:

  • Simple: esto usa el ID del puesto para el enlace. Tendrá sentido para los navegadores pero no significará mucho para los seres humanos o los motores de búsqueda. Se ve así: example.com/?p=123.
  • Día y nombre: Esto incluye la fecha completa en la que se publicó el post, así como su nombre (o más exactamente su slug). Se ve así: example.com/2020/06/01/my-post/.
  • Mes y nombre: Esta es una versión más corta del día y el nombre, con sólo el mes y el año y no el día: example.com/2020/06/my-post/.
  • Numérico: Como la opción simple, esta usa el ID del post y no es muy fácil de usar. example.com/archives/123.
  • Nombre del post: Esta opción no incluye ninguna fecha o identificación del post, sino que sólo usa la tecla: example.com/my-post/.
  • Estructura personalizada: Aquí puedes crear tu propia estructura personalizada. Usa etiquetas para obtener información basada en los datos del mensaje, y texto estático para añadir algo que no cambie entre mensajes.

Estas etiquetas son palabras clave específicas envueltas dentro del carácter %. WordPress proporciona las siguientes etiquetas:

  • %year%– el año de la post-publicación (cuatro dígitos).
  • %monthnum% – el mes de publicación (dos dígitos).
  • %day% – el día de la publicación (dos dígitos).
  • %hour% – la hora de publicación (dos dígitos).
  • %minute% – el minuto de publicación (dos dígitos).
  • %second% – el segundo de la publicación (dos dígitos).
  • %post_id% – el ID único del puesto (entero).
  • %postname% – el slug del poste (es decir, la cuerda desinfectada que representa el título del poste).
  • %category% – la categoría «slug».
  • %author% – el slug del autor.

Intenta comprobar el botón de radio Estructura personalizada y añade una de las siguientes cadenas en el campo de texto:

  • /%author%/%postname%/
  • /%year%/%postname%/
  • /%category%/%postname%/

Cualquiera de estas cuerdas genera un bonito permalink diferente con valores semánticos específicos, como se muestra a continuación:

example.com/rachelmccollin/wordpress-permalinks/
example.com/2020/wordpress-permalinks/
example.com/CMS/wordpress-permalinks/

En el primer ejemplo, la URL resultante destaca al autor del mensaje. Los otros dos formatos nos dicen el año de publicación y la categoría del post, respectivamente. Depende de ti elegir el formato que más te convenga.

Una vez que hayas seleccionado la opción que deseas, pasa a la sección Opcional o haz clic en Guardar cambios para guardar la configuración.

Configuración opcional de Permalink

Además de la configuración de tus mensajes individuales, la pantalla de configuración de Permalinks también te permite establecer una estructura personalizada para tus archivos de categorías y etiquetas.

Si no lo haces, el valor por defecto es incluir /category/category-slug/ al final del permalink. Así que si tienes una categoría de ‘featured’, tu página de archivo estaría en yoursite.com/category/featured.

Ajustes opcionales de permalink
Ajustes opcionales de permalink

Puedes modificarlo en la sección Opcional de la página de configuración de Permalinks. Así que si quisieras tener yoursite.com/blog/featured/ como el enlace permanente para ese archivo de categoría, entrarías en el blog en el campo Base de la categoría. No tienes que insertar barras invertidas o usar etiquetas.

¿Cómo cambiar los permalinks y las slugs para los mensajes y páginas individuales?

Una vez que hayas activado bonitos permalinks en tu sitio de WordPress, es hora de optimizar el slug para posts y páginas individuales.

Es mejor hacer esto cuando estás creando tu contenido. Si cambias el slug de un post, entonces cambiarás la URL que utiliza, y cualquier enlace que tú o tus visitantes compartieron en el pasado ya no funcionará.

Para editar el slug de un post, trabajas en la pantalla de edición de ese post. Ve a «Mensajes» y selecciona el mensaje que deseas editar. (Si estás en el proceso de crear el mensaje, ya estarás en la pantalla derecha).

En la pantalla de edición posterior, selecciona el panel de documentos en el lado derecho y ve a la sección Permalink. Haz clic en la flecha a la derecha de la misma si no está ya abierta.

Edición de Permalink en la pantalla de edición posterior
Edición de Permalink en la pantalla de edición posterior

El slug generada automáticamente se mostrará en el campo de la URL Slug. Puedes editar esto para que el slug sea más corta y esté más enfocada.

Antes de editarlo, copia el viejo slug en algún lugar para que puedas usarlo si necesitas configurar una redirección después (esto sólo se aplica a los posts publicados anteriormente).

Slug editado
Slug editado

Ahora haz clic en el botón Publicar o Actualizar para guardar los cambios.

No lo olvides: si has editado el slug para un post existente, podrías crear un problema para la gente que tiene el enlace original y debería usar redirecciones.

¿Cómo cambiar la configuración de Permalink para las páginas de archivo?

Para cambiar la configuración de Permalink para páginas de archivo individuales, puedes editar la configuración de la base de ‘categoría’ o ‘etiqueta’ en la pantalla de configuración de Permalinks. También puedes cambiar el slug para una categoría, etiqueta o taxonomía personalizada individual.

Veamos cómo lo haces, y luego pasemos a editar el permalink para taxonomías personalizadas y los tipos de publicaciones cuando las registres.

Cambiando las slugs por categorías y etiquetas

Para ello, ve a Posts > Categorías (o Posts> Tags).

Pantalla de edición de categorías
Pantalla de edición de categorías

Encuentra la categoría o la etiqueta cuyo slug quieres editar y haz clic en su nombre.

Editar una slug de categoría
Editar una slug de categoría

Luego puedes escribir una slug para la categoría o la etiqueta. WordPress generará automáticamente uno basado en el nombre de la categoría o etiqueta, pero no tienes que guardar esto. Al igual que con los mensajes, es sensato hacer esto cuando configures la categoría o la etiqueta. Si lo haces más tarde, tendrás que configurar una redirección.

Si se establece una taxonomía personalizada, o se crea una mediante un plugin, se pueden editar las slugs para los términos individuales de esa taxonomía exactamente de la misma manera. Pero si quieres editar el slug para la taxonomía en sí, necesitarás editar algún código.

Cambiar las slugs por taxonomías personalizadas

Cuando registras una taxonomía personalizada, las páginas de archivo de esa taxonomía tendrán automáticamente un URL de yoursite.com/taxonomy/term, donde taxonomía es el ID de la taxonomía y término es el término slug.

Imaginemos que registras una taxonomía personalizada para idiomas con el ID de kinsta_language, que utiliza un prefijo para asegurarse de que es distinta de cualquier otra taxonomía registrada por otros plugins. Podrías entonces crear un término con un fragmento de francés.

El URL para el archivo de ese término taxonómico sería yoursite.com/kinsta_language/french.

¿Pero qué pasa si quieres cambiar eso para que no incluya ese prefijo y sea más fácil de usar? Puedes hacerlo usando el argumento de reescritura cuando registras la taxonomía.

Aquí está el código que se usaría para registrar la taxonomía, incluyendo el argumento de reescritura.

function kinsta_register_taxonomy() {                

 // languages
 $labels = array(
  'name'=> __( 'Languages' ),
  'singular_name' => __( 'Language' ),
  'search_items' => __( 'Search Languages' ),
  'all_items' => __( 'All Languages' ),
  'edit_item' => __( 'Edit Languages' ),
  'update_item' => __( 'Update Languages' ),
  'add_new_item' => __( 'Add New Language' ),
  'new_item_name' => __( 'New Language Name' ),
  'menu_name' => __( 'Languages' ),
 );

 $args = array(
  'labels' => $labels,
  'hierarchical' => true,
  'sort' => true,
  'args' => array( 'orderby' => 'term_order' ),
  'rewrite' => array( 'slug' => 'language' ),
  'show_admin_column' => true,
  'show_in_rest' => true
 );

 register_taxonomy( ‘kinsta_language', array( 'post', ‘attachment' ), $args);   

}

add_action( 'init', 'kinsta_register_taxonomy' );

La línea importante de ese código es ésta:

'rewrite' => array( 'slug' => 'language' ),

que reescribe este slug de kinsta_language (el ID) a language (el nuevo valor). Así que su nueva URL sería yoursite.com/language/french. Mucho más fácil de usar!

¿Cómo cambiar las slugs por tipos de posts personalizados?

Los tipos de publicaciones personalizadas funcionan de la misma manera que las taxonomías personalizadas cuando las registras, por lo que tendrán una URL que incluye el ID del tipo de publicación personalizada.

Imaginemos que registras un tipo de mensaje personalizado llamado kinsta_book y creas un mensaje de ese tipo llamado «Huckleberry Finn», con un trozo de huckleberry-finn.

La URL sería yoursite.com/kinsta_book/huckleberry-finn. Y la indicación para el archivo de tipo postal sería yoursite.com/kinsta_book.

De nuevo, puedes cambiar esto cuando registres el tipo de mensaje personalizado, usando el argumento de reescritura. De nuevo, aquí está el código que incluye ese argumento:

function kinsta_register_post_type() {

 // books
 $labels = array(
  'name' => __( 'Books' ),
  'singular_name' => __( 'Book' ),
  'add_new' => __( 'New Book' ),
  'add_new_item' => __( 'Add New Book' ),
  'edit_item' => __( 'Edit Book' ),
  'new_item' => __( 'New Book' ),
  'view_item' => __( 'View Book' ),
  'search_items' => __( 'Search Books' ),
  'not_found' =>  __( 'No Books Found' ),
  'not_found_in_trash' => __( 'No Books found in Trash' ),
 );

 $args = array(
  'labels' => $labels,
  'has_archive' => true,
  'public' => true,
  'hierarchical' => false,
  'supports' => array(
   'title',
   'editor',
   'excerpt',
   'custom-fields',
   'thumbnail',
   'page-attributes'
  ),
  'taxonomies' => array( ‘kinsta_language', 'category'),
  'rewrite'   => array( 'slug' => 'book' )
 );
 
 register_post_type( ‘kinsta_book', $args );

}

add_action( 'init', 'kinsta_register_post_type' );

La línea importante para el slug es esta:

'rewrite'   => array( 'slug' => 'book' )

Así que ahora las URLs serán yoursite.com/book/huckleberry-finn para un libro individual y yoursite.com/book para el archivo.

Edición de permalinks usando campos personalizados

Además de los variables de consulta públicos y privados, WordPress permite a los desarrolladores y usuarios avanzados definir sus propios variables de consulta personalizados. Una vez registradas, estas variables pueden añadirse a las cadenas de consulta, al igual que los variables de consulta pública, y sus valores pueden utilizarse para afectar también a las consultas.

Aquí está cómo construir una metaconsulta personalizada (es decir, una consulta que recupera los mensajes por el campo personalizado) aprovechando los variables de consulta personalizados.

Para lograr este objetivo, desarrollaremos un plugin desde el cual registraremos variables personalizadas, obtendremos sus valores y cambiaremos la consulta en consecuencia.

Así es como…

Crea un plugin en tu directorio wp-content/plugins. Añade una función para registrar las variables de consulta:

/**
 * Register custom query vars
 *
 * @param array $vars The array of available query variables
 */

function myplugin_register_query_vars( $vars ) {

 $vars[] = 'city';
 return $vars;

}

add_filter( 'query_vars', 'myplugin_register_query_vars' );

El filtro query_vars permite añadir, eliminar o cambiar los vars de consulta pública antes de la ejecución de la consulta. La función callback del ejemplo almacena como argumento un array de las variables disponibles, añade una nueva variable y devuelve el mismo array.

A continuación, añade esta función que utiliza el valor de la variable para cambiar la consulta:

/**
 * Build a custom query
 *
 * @param $query obj The WP_Query instance (passed by reference)
 *
 */

function myplugin_pre_get_posts( $query ) {

 // check if the user is requesting an admin page
 // or current query is not the main query
 if ( is_admin() || ! $query->is_main_query() ){
  return;
 }

 $city = get_query_var( 'city' );

 // add meta_query elements
 if( !empty( $city ) ){
  $query->set( 'meta_key', 'city' );
  $query->set( 'meta_value', $city );
  $query->set( 'meta_compare', 'LIKE' );
 }

}

add_action( 'pre_get_posts', 'myplugin_pre_get_posts', 1 );

El gancho de acción pre_get_posts se dispara después de que la consulta se crea pero antes de que se ejecute. Así que podemos enganchar una función de devolución de llamada a esta acción para hacer nuestros cambios en la consulta antes de que se ejecute. Eso es lo que sucede:

  • La función de devolución de llamada mantiene una instancia del objeto $query, que se pasa por referencia, no por valor. Esto significa que cualquier cambio en el objeto de consulta afecta a la consulta original y no a una copia de la misma. Por esta razón, tenemos que estar seguros de qué consulta se va a ejecutar (la consulta principal).
  • Más tarde, obtenemos el valor de la ciudad de la cadena de consulta actual gracias a la función get_query_var.
  • Por último, si $city no está vacío, podemos establecer los elementos de meta consulta meta_key, meta_value y meta_compare. Estos últimos son variables de consulta privada que no están disponibles para las solicitudes públicas. Sus valores sólo pueden ser establecidos desde dentro del script.

Ahora activa el plugin, añade el campo de la ciudad personalizada a un número de mensajes. Ve a Configuración > Permalinks para refrescar los permalinks, no tienes que hacer nada, sólo tienes que visitar la pantalla.

Ahora comprueba las URLs como las siguientes:

https://example.com/?city=London

En respuesta a esta petición WordPress devolvería todos los puestos donde el valor de campo de la ciudad es Londres.

Nuestra última tarea es convertir el feo URL del ejemplo anterior en una bonita estructura de permalink. Añadamos la siguiente función a nuestro plugin:

/**
* Add rewrite tags and rules
*/

function myplugin_rewrite_tag_rule() {

 add_rewrite_tag( '%city%', '([^&]+)' );
 add_rewrite_rule( '^city/([^/]*)/?', 'index.php?city=$matches[1]','top' );

}

add_action('init', 'myplugin_rewrite_tag_rule', 10, 0);

Las funciones add_rewrite_tag y add_rewrite_rule son parte de la Rewrite API. add_rewrite_tag hace que WordPress conozca la var de la consulta de la ciudad, mientras que add_rewrite_rule especifica una nueva regla de reescritura. Ambas funciones deben ser enganchadas a la acción init. Gracias a la nueva etiqueta y regla, podemos usar la siguiente URL:

https://example.com/city/London/

WordPress devolverá un archivo de posts donde el valor de campo de la ciudad personalizada es Londres.

Nota: cada vez que se agrega una nueva regla de reescritura, los permalinks de WordPress tienen que ser actualizados desde la pantalla de permalinks en el menú de administración de la configuración.

¿Cómo cambiar los permalinks en WooCommerce?

WooCommerce crea tipos de postales y taxonomías personalizadas, todas ellas con permalinks por defecto definidos por el plugin.

Puedes editar los ajustes de permalink y las slugs para todo esto.

Cambiar la categoría del producto, la etiqueta y los permalinks de atributos

Hay dos aspectos en la edición de los permalinks para las categorías de productos, etiquetas y atributos: la estructura y el slug. Estos funcionan de manera similar a las categorías y etiquetas regulares.

Para editar la estructura de los permalinks, ve a Configuración > Permalinks y encuentra la sección Opcional, donde WooCommerce habrá añadido algunos campos extra.

Configuración opcional de permalinks con WooCommerce instalado
Configuración opcional de permalinks con WooCommerce instalado

Aquí puedes editar la configuración de los permalinks para las tres taxonomías personalizadas añadidas por WooCommerce:

  • Categorías de productos: el valor por defecto es /product-category/ pero puedes modificarlo si utilizas una terminología diferente en tu tienda. Asegúrate de que el cambio no entre en conflicto con la configuración de las categorías normales, que no son lo mismo.
  • Etiquetas de productos: el valor por defecto es /product-tag/, y puedes cambiarlo si quieres. Asegúrate de evitar un choque con las etiquetas de los mensajes regulares.
  • Atributos del producto: funcionan de manera diferente a las otras dos taxonomías y tienen una estructura diferente. Todo lo que se añada aquí irá siempre seguido de la indicación del nombre del atributo individual (por ejemplo, el tamaño) y del propio atributo (el término, por ejemplo, grande).

Si quieres editar el slug de una categoría o etiqueta individual, ve a Productos > Categorías (o Productos > Etiquetas) y edítala de la misma manera que publicarías las etiquetas y categorías.

Categoría de producto edición de slug
Categoría de producto edición de slug

La edición de los atributos es diferente porque no sólo se tiene el atributo en sí, sino también los términos del atributo.

Empieza por ir a Productos > Atributos.

Pantalla de atributos del producto
Pantalla de atributos del producto

Cuando se crea un nuevo atributo, se utiliza el campo Slug para establecer el slug de la misma manera que lo haría para una etiqueta o categoría. Como alternativa, para editar la barra de herramientas de un atributo existente, haz clic en el enlace Editar que se encuentra debajo de ese atributo en la lista de la derecha.

Edición de las slugs de atributos de los productos
Edición de las slugs de atributos de los productos

Haz clic en Actualizar para guardar los cambios.

Para editar los términos de atributo, ve a la pantalla de atributos y haz clic en el enlace Configurar términos que aparece junto al atributo. Esto te llevará a la lista de términos de ese atributo.

Listado de términos de atributos del producto
Listado de términos de atributos del producto

Ahora edita el slug para ese término como lo harías para una categoría o etiqueta. Esto se agregará a la URL del archivo de productos que tengan ese término.

Cambiar los permalinks del producto

Edita los permalinks del producto a través de Ajustes > Permalinks. Desplázate hacia abajo hasta la sección Permalinks del Producto.

Ajustes de los permalinks del producto
Ajustes de los permalinks del producto

Aquí puedes elegir entre cuatro ajustes de permalinks para tus productos:

  • Por defecto: Si ya has activado unos bonitos permalinks, esto usará el slug de cada producto con la base /producto/.
  • Base de la tienda: En lugar de usar /producto/, tu tienda usará /tienda/.
  • La base de la tienda con la categoría: Inserta la categoría del producto actual en la URL. Esto puede añadir palabras clave que quieras dirigir si tus categorías de productos las reflejan, pero no ayudará a tu UX ya que crea URLs largas.
  • La base de la costumbre: Crea tu propia estructura de URL usando las palabras que se aplican a tu tienda. No puedes eliminar la base por completo, tienes que usar algo.

Una vez que hayas elegido la opción que deseas, haz clic en el botón Guardar cambios para guardar tu elección.

También puedes editar el slug de un producto individual en la pantalla de edición de productos, exactamente de la misma manera que lo harías para un post o una página.

¿Cómo cambiar los permalinks de WordPress con un plugin?

Puedes usar un plugin de terceros para hacer enmiendas a tu configuración de permalinks más allá de lo que te permite la pantalla de configuración predeterminada de Permalinks de WordPress.

Custom Permalinks Plugin de WordPres
Custom Permalinks Plugin de WordPres
  • El plugin Custom Permalinks te permite configurar la URL de cualquier categoría o etiqueta de publicación a lo que quieras. También establece redirecciones para que las antiguas URLs sigan funcionando.
  • El plugin Permalink Manager Lite es compatible con tipos de posts personalizados, así como con taxonomías personalizadas en la versión pro. También incluye redirecciones y funciona con plugins de terceros como WooCommerce y Yoast.

¿Cómo cambiar los permalinks de WordPress en phpMyAdmin?

Si sabes lo que estás haciendo y estás seguro de que no vas a romper nada, también puedes editar los permalinks en phpMyAdmin.

Esto es algo que quizás tengas que hacer si no puedes acceder a la pantalla de configuración de Permalinks por alguna razón.

Empieza por hacer una copia de seguridad de tu base de datos. Vas a editarla directamente, así que es importante hacer una copia de seguridad en caso de que cometas un error.

Accede a phpMyAdmin.

Si eres cliente de Kinsta, lo haces entrando en MyKinsta y seleccionando el sitio con el que quieres trabajar.

Desplázate hacia abajo en la pantalla de información y pulsa el botón Abrir phpMyAdmin.

Abrir phpMyAdmin en MyKinsta
Abrir phpMyAdmin en MyKinsta

Escribe el nombre de usuario y la contraseña de tu base de datos para acceder a phpMyAdmin. Puede srecuperarlos desde la pantalla de información.

Haz clic en la pestaña de Bases de datos en la parte superior y luego selecciona la base de datos con la que quieres trabajar.

Estructura de la base de datos en phpMyAdmin
Estructura de la base de datos en phpMyAdmin

Selecciona la tabla wp_options y busque la entrada permalink_structure en la columna option_name. Puede que tengas que navegar más allá de la primera página de entradas.

Encontrar la entrada de la permalink_structure
Encontrar la entrada de la permalink_structure

Haz clic en el enlace Editar a la izquierda de esa entrada y luego en el campo option_value, añade la estructura de enlace permanente que quieras usar. Utiliza las etiquetas que identificamos anteriormente para tu uso en la pantalla de configuración de Permalinks.

Editar la estructura del permalink
Editar la estructura del permalink

Haz clic en «Go». Ahora tus permalinks serán actualizados.

Más información: Cómo cambiar tu URL de WordPress

Trabajando con permalinks de imágenes

Las imágenes tienen permalinks propios, y cada imagen o archivo de medios que subas a tu sitio tendrá un número de enlaces creados para ello:

  • El enlace a la imagen que subiste, la imagen original.
  • Enlaces para las nuevas imágenes que se generan usando los tamaños de los medios de comunicación que se establecen a través de Ajustes > Medios de comunicación.

El enlace a la imagen original

Cuando subas una imagen, se creará un enlace único al archivo donde se almacena en tu servidor. Esto incluirá la ruta a donde se guarda, que es wp-content/uploads.

También incluirá la fecha en la que se subió la imagen. Esto significa que si subes otra imagen con el mismo nombre de archivo el próximo mes (o el próximo año), las imágenes no se confundirán ya que tendrán rutas de archivo únicas.

Si subes una imagen llamada funnycat.jpg el 1 de abril de 2020, su enlace será yoursite.com/wp-content/uploads/04/funnycat.jpg. El 04 indica que el archivo fue subido en abril. WordPress crea una carpeta numerada en el directorio de subidas para cada mes.

Si subes un archivo que no es una imagen, la URL funcionará de la misma manera: yoursite.com/wp-content/uploads/04/document.pdf.

Si subes más de un archivo con el mismo nombre en un mes determinado, WordPress añadirá un número al final del nombre del archivo. Así que si subo otra imagen llamada funnycat.jpg, la llamará funnycat-1.jpg.

Si alguna vez necesitas enlazar con la imagen original o encontrarla para comprobar que funciona correctamente, así es como encuentras el enlace.

También puedes encontrar el enlace al archivo adjunto yendo a Medios > Biblioteca y haciendo clic en el archivo. Se mostrará la pantalla de edición de ese archivo y podrás encontrar su URL en el campo File URL del lado derecho.

Enlace de la imagen original
Enlace de la imagen original

También puedes enlazar el archivo usando la función wp_get_attachment_image() proporcionada por WordPress. Esta es una mejor práctica ya que significa que el enlace no cambiará si el archivo adjunto se mueve en el futuro. Esta es una función que se usaría en un plugin o un archivo de plantilla de tema, y utiliza el ID único del archivo adjunto.

En el caso de mi imagen funnycat.jpg, la identificación es 4995. Puedo conseguirlo yendo a la pantalla de edición de imágenes y haciendo clic en el URL de esta pantalla en la parte superior de la ventana del navegador. Los últimos dígitos serán el ID.

Para obtener esta imagen en un archivo de plantilla o un plugin, yo usaría este código:

<?php wp_get_attachment image( ‘4995’ ); ?>

Esto se obtendría en la imagen a tamaño completo. Si quisiera producirlo, añadiría echo:

<?php echo wp_get_attachment image( ‘4995’ ); ?>

Permalinks a imágenes de diferente tamaño

WordPress también creará imágenes utilizando los ajustes de tamaño de archivo que se han configurado para tu sitio. Para ello, ve a Ajustes > Medios.

Pantalla de ajustes de medios
Pantalla de ajustes de medios

Así que si tu imagen ya es más grande que el ajuste grande, creará tres imágenes: grande, mediana y en miniatura.

No los nombra usando estas convenciones porque podría cambiar el escenario de las mismas en el futuro. En su lugar, utiliza las dimensiones del archivo dentro del nombre de archivo y las guarda en el mismo lugar que la imagen original, en la carpeta del mes en wp-content/uploads.

La forma más fácil de encontrar los enlaces es mirar en tu cliente FTP y encontrar todas las imágenes subidas en un mes determinado.

Las imágenes subidas en el cliente FTP
Las imágenes subidas en el cliente FTP

Tomemos la imagen que he subido a mi sitio llamado funnycat.jpg. Puedes verla en la captura de pantalla de arriba.

WordPress también ha creado archivos extra usando la configuración del tamaño de los archivos de mi sitio:

  • funnycat-150×150.jpg
  • funnycat-222×300.jpg
  • funnycat-300×200.jpg
  • funnycat-757×1024.jpg
  • funnycat-768×1040.jpg
  • funnycat-1135×1536.jpg
  • funnycat-1513×2048.jpg

Hay más que los estándar allí porque estoy usando plugins que hacen uso de tamaños de imagen adicionales y he establecido un tamaño personalizado adicional para una de mis plantillas de página en el tema. Pero podrías usar el enlace a cualquiera de estos como un enlace duro si quisieras.

Sin embargo, una mejor opción si se quiere enlazar a la imagen, sería utilizar la función wp_get_attachment_image() que ya hemos visto, y añadir un parámetro extra para el tamaño de la imagen.

Así que para obtener la imagen de tamaño medio, se usaría esto:

<?php echo wp_get_attachment image( ‘4995’, ‘medium’ ); ?>

Esa es una forma mucho más robusta de obtener la imagen que crear un enlace duro en tu código.

¿Cómo redirigir los permalinks para diferentes tipos de contenido?

Editar el slug de una publicación existente, o cambiar la configuración del permalink en general, puede causar un problema si anteriormente has compartido publicaciones usando los enlaces antiguos. Si alguien hace clic en esos enlaces, será llevado a una página 404.

Puedes arreglar esto creando redirecciones de los antiguos enlaces a los nuevos.

Redireccionamiento de mensajes y páginas individuales

Para redirigir el antiguo slug de un mensaje a la nueva, tendrás que configurar una regla de redireccionamiento para esas dos URL.

Si estás con Kinsta, puedes crear reglas de redireccionamiento en el panel de control de MyKinsta.

Encuentra tu sitio, y luego haz clic en la opción Redirecciones del menú.

Redirecciona en MyKinsta
Redirecciona en MyKinsta

Haz clic en el botón Agregar regla de redirección para abrir la ventana emergente de reglas de redirección.

MyKinsta añade la regla de redireccionamiento
MyKinsta añade la regla de redireccionamiento

Para añadir tu redirección, selecciona 301 redireccionar, luego escribe el antiguo slug como el valor Redirigir desde y el nuevo slug como el valor Redirigir a.

Haz clic en el botón Agregar regla de redirección y tu redirección será configurada.

Si no estás con Kinsta, puedes usar un plugin de redireccionamiento para configurar las redirecciones. El plugin redireccionamiento es el más popular. Te permitirá configurar redirecciones manualmente y también supervisará los cambios en las slugs y configurará automáticamente las redirecciones por ti. Ten cuidado de evitar los bucles de redireccionamiento, ya que estos resultan en el error de «demasiadas redirecciones«, impidiendo que las páginas se carguen.

Abajo puedes ver que he cambiado el slug de uno de mis posts y el plugin la ha atrapado y ha establecido una regla de redireccionamiento.

La regla de redireccionamiento del plugin de redireccionamiento se ha establecido
La regla de redireccionamiento del plugin de redireccionamiento se ha establecido

Redireccionamiento de las páginas de archivo

Si cambia la estructura de las páginas de su archivo usando la sección Opcional en la página de configuración de Permalinks, cualquiera que use el antiguo enlace a un archivo de categoría será llevado a su página 404. Así que tendrás que configurar una redirección con comodines.

En MyKinsta, crea una regla de redireccionamiento que utilice la estructura base que usabas antes y la que usas ahora, con un asterisco para indicar un comodín después de ella.

En el campo Redirigir desde, escriba el camino antiguo a las categorías, con un comodín. Necesita tomar la forma /oldslug/(.*)$. La entrada para Redireccionar a necesita tomar la forma /newslug/$1.

Así que si has cambiado la estructura de la URL de la categoría para usar el blog antes del nombre de la categoría en lugar de la categoría por defecto, deberías introducir /category/(.*)$ en el campo Redirect from y /blog/$1 en el campo Redirect to.

Añadiendo una redirección comodín en MyKinsta
Añadiendo una redirección comodín en MyKinsta

Si usas el plugin Redirection, tendrás que habilitar primero las funciones Regex, ya que el asterisco comodín es una función regex.

Ve a Herramientas > Redireccionamiento y ve a Agregar nueva sección de redireccionamiento de la pantalla.

Creando una nueva regla de redireccionamiento con el plugin de redireccionamiento
Creando una nueva regla de redireccionamiento con el plugin de redireccionamiento

Haz clic en el menú desplegable Opciones de URL/Regex y marca la casilla Regex.

Configurando una redirección comodín con el plugin de Redirección
Configurando una redirección comodín con el plugin de Redirección

En el campo URL de la fuente, escriba la antigua ruta de categorías, con un comodín. Debe tomar la forma /oldslug/(.*)$. La entrada para URL de destino necesita tomar la fuente /newslug/$1. Esto funciona exactamente de la misma manera que en MyKinsta.

Consulta nuestra guía en vídeo sobre las mejores prácticas de redirección de WordPress:

Solución de problemas de WordPress Permalinks

Ocasionalmente puedes encontrar que los permalinks no funcionan como esperas que lo hagan. Esto es lo que hay que hacer si eso ocurre.

Los permalinks no funcionan después de registrar un tipo de post

A veces se registra un nuevo tipo de post o taxonomía y los enlaces a las páginas de archivo relevantes o al post del tipo de post no se preocupan.

¡No te asustes! Esto es simplemente porque WordPress no sabe que el tipo de post personalizado o la taxonomía significa un cambio en la configuración del permalink. Simplemente ve a Asentamientos > Permalinks para refrescar la configuración. Ni siquiera necesitas hacer ningún cambio o hacer clic en el botón de Guardar Cambios – con sólo abrir la pantalla será suficiente.

Los permalinks no se comportan de la manera que quieres que lo hagan

Si tus permalinks no funcionan como esperas y no es porque acabes de registrar un tipo de correo personalizado o una taxonomía, prueba estos consejos.

  • Comprueba que has escrito correctamente la URL en el navegador.
  • Ve a Configuración > Permalinks y comprueba la configuración. ¿Son las etiquetas correctas? Asegúrate de no haber pasado nada por alto o haber usado la sintaxis incorrecta.
  • Limpia la caché de tu sitio web si estás usando un plugin de caché. El almacenamiento en caché puede interferir con los cambios en los enlaces.
  • Si has cambiado la configuración de los permalinks, es posible que tengas enlaces en el cuerpo del contenido de tu sitio web que ahora están desactualizados. Edítalos o configura redireccionamientos.
  • Comprueba si has cambiado manualmente el slug para cualquier entrada y si estas necesitan ser editadas.
  • Comprueba si tiene instalado un plugin de redireccionamiento o un plugin que incluya el redireccionamiento. Si es así, comprueba qué redirecciones has añadido a la configuración.
  • Si tienes algún plugin que afecte a los tipos de mensajes o a los enlaces, intenta desactivarlo y ver si así se soluciona el problema.
  • Si no puedes acceder a la pantalla de configuración de los permalinks, utiliza el método detallado anteriormente para editar los permalinks a través de phpMyAdmin.

Sigue estos consejos y podrás hacer que tus permalinks funcionen como deben.

Resumen

Los permalinks son una característica increíblemente útil de WordPress. Puedes usarlos para mejorar la experiencia del usuario y aumentar tu posición en los motores de búsqueda.

Si sigues la guía anterior, tendrás permalinks optimizados. Podrás configurarlos para que funcionen exactamente de la manera que necesitas, para todos los tipos de posts, taxonomías y slugs personalizadas.

Ahora, es tu turno: ¿cómo manejas tus permalinks? ¿Olvidamos cubrir algo sobre los permalinks de WordPress? Háznoslo saber en los comentarios de abajo!

Rachel McCollin

Rachel McCollin has been helping people build websites with WordPress since 2010. She's a huge fan of self-hosted WordPress and wants to help as many people as possible create an awesome website with it.