¿Cómo se muestra la URL de la página actual?

56

Quiero agregar un código PHP personalizado para garantizar que cada vez que una página de mi sitio se cargue en mi navegador, la URL de esa página se repita en la pantalla. Puedo usar echo get_permalink(), pero eso no funciona en todas las páginas. Algunas páginas (por ejemplo, mi página de inicio ) muestran varias publicaciones, y si las uso get_permalink()en estas páginas, la URL de la página mostrada no se devuelve (creo que devuelve la URL de la última publicación en el bucle). Para estas páginas, ¿cómo puedo devolver la URL?

¿Puedo conectarme get_permalink()a un gancho particular que se dispara antes de que se ejecute el bucle? ¿O puedo salir del bucle de alguna manera, o restablecerlo una vez que esté completo?

Gracias.

cag8f
fuente
¿Puede proporcionar algún contexto sobre lo que le gustaría hacer con esta URL? ¿Estás tratando de crear URL compartibles? ¿Ensamblar URL personalizadas para enlaces / acciones?
Tom J Nowell
@TomJNowell Me gustaría poner en cola un script JS en particular, pero solo en ciertas páginas (en este caso, esas páginas son la página de inicio de mi sitio en varios idiomas: example.com , example.com/fr , example.com/es , etc) El archivo JS servirá para agregar hipervínculos a varios títulos que solo aparecen en la página de inicio.
cag8f
¿por qué no solo usar is_home()o is_page( 'fr' )etc. y solo poner en cola el script si es verdad?
Tom J Nowell
@TomJNowell Bueno, ahora mi código es if ( home_url( $wp->request ) == home_url() ) { wp_enqueue_script();} Esto parece dispararse en cada página de inicio, independientemente del idioma. ¿Es eso lo que estabas sugiriendo?
cag8f
¿Por qué no usar $_SERVER['REQUEST_URI']y compañía? Vea esta pregunta: stackoverflow.com/q/6768793/247696
Flimm

Respuestas:

88

get_permalink() solo es realmente útil para páginas individuales y publicaciones, y solo funciona dentro del bucle.

La forma más simple que he visto es esta:

global $wp;
echo home_url( $wp->request )

$wp->requestincluye la parte de la ruta de la URL, por ejemplo. /path/to/pagey home_url()genera la URL en Configuración> General, pero puede agregarle una ruta, por lo que estamos agregando la ruta de solicitud a la URL de inicio en este código.

Tenga en cuenta que esto probablemente no funcionará con los enlaces permanentes establecidos en Normal y dejará fuera las cadenas de consulta (la ?foo=barparte de la URL).

Para obtener la URL cuando los enlaces permanentes se configuran como simples, puede usarlos $wp->query_varspasándolos a add_query_arg():

global $wp;
echo add_query_arg( $wp->query_vars, home_url() );

Y podría combinar estos dos métodos para obtener la URL actual, incluida la cadena de consulta, independientemente de la configuración del enlace permanente:

global $wp;
echo add_query_arg( $wp->query_vars, home_url( $wp->request ) );
Jacob Peattie
fuente
77
Si los enlaces permanentes a Normal: echo '//' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];.
Max Yudin
1
@Jacob Lo intenté, pero parece que solo devuelve la URL de mi página de inicio. Como puede ver en la parte superior izquierda de esta página ( dev.horizonhomes-samui.com/properties/hs0540 ), donde he insertado el código echo home_url( $wp->request ). Me he asegurado de incluir global $wptambién. Los enlaces permanentes no son 'Normal', sino que se configuran como 'Nombre de publicación'. Tampoco veo ningún error PHP relevante en el registro. Esta página en particular es parte de mi sitio de desarrollo, que de lo contrario está bloqueado para los visitantes. No estoy seguro de si eso importa o no. editar: En realidad, mantenga ese pensamiento, podría ser un error del usuario. Stand by ...
cag8f
@Jacob edit 2: OK, su código realmente funciona. Mi problema fue que estaba incluyendo el código en functions.php 'desnudo', es decir, no en ninguna función que esté conectada a un gancho. Por lo tanto, su código estaba devolviendo la URL de la página de inicio, independientemente de la página que se mostraba en mi navegador. Una vez que moví el código dentro de una función, una función adjunta a un enlace WP (wp_enqueue_scripts), de hecho devolvió la URL de la página mostrada. ¿Sabes la razón de ese comportamiento? Tal vez necesito crear una nueva pregunta para eso.
cag8f
3
@ cag8f Si el código se encuentra "desnudo" en functions.php, entonces lo está ejecutando antes de que se hayan configurado todas las propiedades del objeto $ wp. Cuando lo envuelve en una función adjunta a un enlace apropiado, está retrasando su ejecución hasta que se ejecute un punto adecuado en el código de Wordpress.
Andy Macaulay-Brook
Todos estos métodos son geniales e ideas geniales para trabajar con WordPress. Sin trailingslashit()embargo, puede agregarlos , según sus necesidades.
Jake
8

Puede usar el siguiente código para obtener la URL actual completa en WordPress:

global $wp;
$current_url = home_url(add_query_arg(array(), $wp->request));

Esto mostrará la ruta completa, incluidos los parámetros de consulta.

rescate1155
fuente
Hola, si echas un vistazo a developer.wordpress.org/reference/functions/add_query_arg , verás que tu código no conserva los parámetros de consulta existentes.
Andy Macaulay-Brook
2
Para preservar los parámetros de consulta, deberá reemplazar el vacío array()por $_GET. es decir:home_url(add_query_arg($_GET,$wp->request));
Brad Adams
No funcionará si WordPress está instalado en el subdirectorio
ManzoorWani
1
function current_location()
{
    if (isset($_SERVER['HTTPS']) &&
        ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
        isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
        $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
        $protocol = 'https://';
    } else {
        $protocol = 'http://';
    }
    return $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
}

echo current_location();
Shree Sthapit
fuente
¿Puedes explicar cómo y por qué este código resuelve la pregunta?
kero
En mi opinión, la solución más flexible. Funciona en cualquier página de WP (incluso en wp-admin, wp-login.php, páginas de archivo, etc.). Solo tenga en cuenta que no incluye ningún parámetro de URL
Philipp,
1

El siguiente código le dará la URL actual:

global $wp;
echo home_url($wp->request)

Puede usar el siguiente código para obtener la URL completa junto con los parámetros de consulta.

global $wp;  
$current_url = home_url(add_query_arg(array($_GET), $wp->request));

Esto mostrará la ruta completa, incluidos los parámetros de consulta. Esto preservará los parámetros de consulta si ya están en la URL.

Adiyya Tadikamalla
fuente
Este fragmento se omite wp-admin/plugins.phpen mi URL actual, es solo la ruta raíz y las cadenas de consulta.
Ryszard Jędraszyk
0

Esta es una forma mejorada de ejemplo que mencionamos anteriormente. Funciona cuando las URL bonitas están habilitadas, sin embargo, se descarta si hay algún parámetro de consulta como / page-slug /? Param = 1 o la URL es fea en absoluto.

El siguiente ejemplo funcionará en ambos casos.

    $query_args = array();

    $query = wp_parse_url( $YOUR_URL );

    $permalink = get_option( 'permalink_structure' );

    if ( empty( $permalink ) ) {

        $query_args = $query['query'];

    }

    echo home_url( add_query_arg( $query_args , $wp->request ) )
Tolginho
fuente
0

Tal vez wp_guess_url()es lo que necesitas. Disponible desde la versión 2.6.0.

Fluir
fuente
Esto solo adivina la URL base. En la interfaz, terminas con un efecto similar a home_url().
Jake
0

¿Por qué no solo usar?

get_permalink(get_the_ID());
Dario Zadro
fuente