Obtener la URL de la página actual (incluida la paginación)

13

¿Existe una función WP para obtener automáticamente la URL correcta de la página actual? Es decir, si acabo de abrir una sola publicación, la función devuelve lo mismo que get_permalink(), pero si estoy en una instancia paginada de una página (al paginar a través de los comentarios), la función devuelve lo mismo que get_pagenum_link(get_query_var('paged'))lo haría.

Busqué en el códice pero no encontré lo que estaba buscando. (Pero incluso get_pagenum_link()no está documentado allí).

Ya conozco esta función , pero me alegraría si hubiera una función WP "nativa" que haga el trabajo.

¡Gracias por adelantado! Saludos, René

René Schubert
fuente

Respuestas:

27

Además de la respuesta de Rajeev Vyas, no es necesario pasar ningún parámetro no vacío add_query_arg(). Lo siguiente siempre me ha funcionado bien:

// relative current URI:
$current_rel_uri = add_query_arg( NULL, NULL );

// absolute current URI (on single site):
$current_uri = home_url( add_query_arg( NULL, NULL ) );

La función recurre $_SERVER[ 'REQUEST_URI' ]y se aplica urlencode_deep()a ella. Ver https://github.com/WordPress/WordPress/blob/3.8/wp-includes/functions.php#L673

Editar: como $_SERVER[ 'REQUEST_URI' ]representa la entrada del usuario sin filtrar, siempre se debe escapar del valor de retorno de add_query_arg()cuando se cambia el contexto. Por ejemplo, utilícelo esc_url_raw()para uso de base de datos esc_attr()o esc_url()para HTML.

Actualizar

El ejemplo mostrado que debería crear un URI absoluto (que contiene el esquema y el host) no funciona en sitios múltiples con subdirectorios, ya home_url()que devolvería el URI completo, incluido un segmento de ruta. Una mejor solución para el código multisitio sería esta:

// absolute URI in multisite aware environment
$parts = parse_url( home_url() );
$current_uri = "{$parts['scheme']}://{$parts['host']}" . add_query_arg( NULL, NULL );

El núcleo de WordPress no admite puerto, usuario o contraseña en una URL de sitio multisitio, por lo que esto debería ser suficiente.

David
fuente
Frustrante que OP no seleccionó esta respuesta como la Solución, que es. Gracias.
cfx
3
global $wp;
$current_url = add_query_arg( $wp->query_string, '', home_url( $wp->request ) );

No es una función, pero definitivamente usa el código de WordPress.

http://kovshenin.com/2012/current-url-in-wordpress/

Rajeev Vyas
fuente
2
Funciona en parte, pero algunas cosas no funcionan como las quiero: los parámetros como yearse agregan a la cadena de consulta, aunque no hayan estado allí antes, y otros parámetros, por ejemplo, el replytocomparámetro, se pierden. ¿Conoces una solución para esto?
René Schubert
0

1) $_SERVER['REQUEST_URI']- Devuelve la URL para acceder a la página que está ejecutando el script. Si necesita escribir http://www.example.com/product.php?id=5para acceder a la página, $_SERVER['REQUEST_URI']regresa /product.php?id=5.

2) $_SERVER['DOCUMENT_ROOT']- Devuelve el directorio raíz del servidor que se especifica en el archivo de configuración del servidor. Esta variable generalmente devuelve la ruta como /usr/yoursite/wwwen Linux y D:/xamps/xampp/htdocsen Windows.

3) $_SERVER['HTTP_HOST']- Devuelve el nombre del host como se encuentra en el encabezado http. Esta variable generalmente devuelve la ruta como example.comcuando la encuentras http://example.comen la barra de direcciones del navegador y regresa www.example.comcuando la ves http://www.example.comen la barra de direcciones. Esto es bastante útil cuando debe preservar la sesión mientras realiza el pago en línea utilizando PHP, ya que la sesión almacenada http://example.comno es la misma que para el http://www.example.com.

4) $_SERVER['HTTP_USER_AGENT']- Devuelve los detalles del agente de usuario (navegador) que accede a la página web. Podemos usar strpos($_SERVER["HTTP_USER_AGENT"],”MSIE”)para detectar Microsoft Internet Explorer o usted puede strpos($_SERVER["HTTP_USER_AGENT"],”Firefox”)detectar el navegador Firefox en PHP.

5) $_SERVER['PHP_SELF']- Devuelve el nombre del archivo del script que se está ejecutando actualmente. Supongamos que está accediendo a la URL y http://www.example.com/product.php?id=5luego $_SERVER['PHP_SELF']regresa /product.phpen su secuencia de comandos.

6) $_SERVER['QUERY_STRING']- Devuelve la cadena de consulta si la cadena de consulta se utiliza para acceder al script que se está ejecutando actualmente. Las cadenas de consulta son aquellas cadenas que están disponibles después de "?" sign.si usa $_SERVER['QUERY_STRING']en el script ejecutando la siguiente URL, http://www.example.com/index.php?id=5&page=productentonces regresa id=5&page=producten su script.

7) $_SERVER['REMOTE_ADDR']- Devuelve la dirección IP de la máquina remota que accede a la página actual. Pero no puede confiar en $_SERVER['REMOTE_ADDR']obtener la dirección IP real de la máquina del cliente. Consulte este artículo para saber cómo obtener direcciones IP reales en PHP.

8) $_SERVER['SCRIPT_FILENAME']- Devuelve la ruta absoluta del archivo que se está ejecutando actualmente. Devuelve la ruta como var/example.com/www/product.phpen Linux y la ruta como D:/xampp/xampp/htdocs/test/example.phpen Windows.

Foxsk8
fuente
1
Tenga en cuenta que ninguno de esos está disponible en su CLI y, por lo tanto, es inútil para trabajos cron.
kaiser
0

wp_guess_url es lo que estás buscando.

Adivina la URL del sitio.

Eliminará los enlaces de wp-admin para recuperar solo las URL de retorno que no están en el directorio wp-admin.

Jesse
fuente
Esto intenta una URL totalmente diferente a la página actual cuando intenté usarla.
Kirby
0

add_query_args( null, null ) creará un elemento de matriz con la clave vacía ( $qs[""] = null) aunque no afectará el resultado.


De acuerdo con add_query_arg () | Función | Recursos para desarrolladores de WordPress , los parámetros segundo y tercero son opcionales y pueden omitirse.

add_query_args( null, null )Puede ser más corto .

$current_url = add_query_args( [] );

También existe la versión más corta, aunque no se recomienda ya que el primer parámetro es el parámetro requerido.

$current_url = add_query_args();

Además, cabe destacar que tanto home_url( add_query_vars( [] ) )y home_url( add_query_arg( null, null ) ) podría no volver URL real cuando WordPress se instala en un subdirectorio.

por ejemplo, https://example.com/wp/wp/foopodría ser devuelto cuando WordPress está instalado en https://example.com/wp/.


Actualización: 2017/01/23

Mi versión se basa en la solución de David para obtener una URL absoluta.

$parts = parse_url(home_url());
$uri   = $parts['scheme'] . '://' . $parts['host'];

if (array_key_exists('port', $parts)) {
    $uri .= ':' . $parts['port'];
}

$uri .= add_query_arg([]);
Whizark
fuente
0

Para mí <?php esc_url(the_permalink()); ?>funciona (en una página de archivo con paginación).

Henning Fischer
fuente
Imposible. the_permalink()repite el permalink escapado, no devuelve nada. El esc_url()no recibe nada, y si lo fuera, sería una URL escapada.
fuxia
Tienes razón, creo que solo funcionó debido al caché de enlaces permanentes.
Henning Fischer
-1

Ahora no tengo paginación, pero puedes usar esta función para obtener la URL dentro del bucle

<?php $ID = get_the_ID(); 
echo get_permalink( $ID ); ?>

O bien, si no prefiere usar php, también puede optar por el método jquery aquí (esto lo ayudará a que funcione fuera del ciclo)

$(document).ready(function () {
var vhref = $(location).attr('href');
var vTitle = $(this).attr('title');
$('#spnTitle').html('' + vTitle + '');
$('#spnURL').html('' + vhref + '');
});​

o si prefiere usar la función php, necesita obtener la identificación fuera del ciclo

vaibhav
fuente
1
Lo siento, pero esto no es lo que he pedido ... + the_permalink()no necesita la identificación cuando se llama dentro del bucle.
René Schubert
2
Esta respuesta tuvo muy poco que ver con la pregunta original. No respondió correctamente ni dio información valiosa sobre el tema.
jounileander
-2

Puede usar la función wordpress para obtener la URL de la página actual

the_permalink()

Esto le devolverá el enlace URL de la página curremt.

Vivek Pandey
fuente
44
Casi; the_permalink()se imprimirá la URL de la entrada actual. Pero no funcionará para otras solicitudes y no incluirá variables como la paginación. Entonces, no es realmente la respuesta que @ René Schubert está buscando.
TheDeadMedic