Es muy normal que cuando estamos desarrollando con WordPress, necesitemos conocer la URL actual que está visualizando el usuario. Por lo general, nos valdrán los condicionales que nos ofrece WordPress, al estilo de is_page(), is_category()… o de los que ofrece WooCommerce: is_woocommerce(), is_cart(), is_checkout(), etc.
Pero a veces, necesitaremos afinar más. ¿Por qué?
- Porque queramos excluir algún fichero JavaScript o CSS de algun vista para optimizar al máximo la carga de la web
- Porque queramos hacer algún tipo de redirección, para obtener por ejemplo siempre la URL canónica de un elemento y evitar URLs duplicadas de un mismo contenido
- Por cualquier otra casuística que se os de, donde los condicionales estándares no sean suficientes
Así que hoy os traigo un trozo de código para este problema: conocer en qué URL está un usuario cuando está visitando tu web. Tenemos dos variaciones, en los casos donde hay un multisitio y en los casos donde no está activado el multisitio, ¿por qué? Porque la función home_url() te devolvería una parte de la URL repetida.
Función en PHP para conocer la URL actual en WordPress
Os dejo una función con todo lo necesario y abajo una breve explicación.
function cod_obtener_url_actual(){ if( is_multisite() ){ $parts = parse_url( home_url() ); $current_uri = "{$parts['scheme']}://{$parts['host']}" . add_query_arg( NULL, NULL ); } else{ $current_uri = home_url( add_query_arg( NULL, NULL ) ); } return $current_uri; }
Si os fijáis el funcionamiento es básico, empezamos por lo más sencillo, el caso de que no sea multisitio. La función add_query_arg tiene 3 argumentos, los dos primeros, los arrays de claves y valores de los parámetros a añadir a la URL, son obligatorios. Como no queremos meter parámetro alguno, pasamos dos NULL. El tercer valor no lo usamos para que use como base el valor de $_SERVER[‘REQUEST_URI’], la URL relativa que es la que toma por defecto, así que añadiendo la URL inicial de WordPress tenemos todo al completo: la parte inicial y la relativa, la URL completa.
El caso del multisitio es similar, pero home_url() ofrece una parte de la URL repetida, extraemos la parte que nos interesa, el esquema y el host, y le añadimos parte de URL relativa que nos ofrece add_query_arg().
Con esto tenemos una función que en cualquier caso, multisitio o no, nos ofrecerá el resultado que queremos.