web-dev-qa-db-fra.com

Obtenir l'URL de la page actuelle (y compris la pagination)

Existe-t-il une fonction WP pour obtenir automatiquement l'URL correcte de la page en cours? Cela signifie que si je viens d'ouvrir un seul article, la fonction retourne la même chose que get_permalink(), mais si je suis sur une instance paginée d'une page (lors de la pagination dans les commentaires), la fonction retourne la même chose que get_pagenum_link(get_query_var('paged')).

J'ai cherché le codex mais n'ai pas trouvé ce que je cherchais. (Mais même get_pagenum_link() n'y est pas documenté.)

Je connais cette fonction déjà, mais je serais heureux s'il y avait une fonction "native" WP qui fait le travail.

Merci d'avance! Cordialement, René

12
René Schubert

En plus de la réponse de Rajeev Vyas, vous n'avez pas besoin de passer de paramètre non vide à add_query_arg(). Ce qui suit a toujours bien fonctionné pour moi:

// 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 fonction retombe sur $_SERVER[ 'REQUEST_URI' ] et lui applique urlencode_deep(). Voir https://github.com/WordPress/WordPress/blob/3.8/wp-includes/functions.php#L673

Edit: Comme $_SERVER[ 'REQUEST_URI' ] représente une entrée utilisateur non filtrée, il convient de toujours échapper à la valeur de retour de add_query_arg() lorsque le contexte est modifié. Par exemple, utilisez esc_url_raw() pour l’utilisation de la base de données ou esc_attr() ou esc_url() pour HTML.

Mise à jour

L'exemple présenté qui devrait créer un URI absolu (contenant un schéma et un hôte) ne fonctionne pas sur un multisite avec des sous-répertoires, car home_url() renverrait l'URI complet, segment de chemin compris. Voici une meilleure solution pour le code multisite sensible:

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

Le noyau WordPress ne prend pas en charge le port, l’utilisateur ou le mot de passe dans une URL de site multisite, cela devrait donc suffire.

22
David
global $wp;
$current_url = add_query_arg( $wp->query_string, '', home_url( $wp->request ) );

Pas une fonction, mais en utilisant du code wordpress ..

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

3
Rajeev Vyas

1) $_SERVER['REQUEST_URI'] - Il renvoie l'URL pour accéder à la page qui exécute le script. Si vous devez taper http://www.example.com/product.php?id=5 pour accéder à la page, $_SERVER['REQUEST_URI'] renvoie /product.php?id=5.

2) $_SERVER['DOCUMENT_ROOT'] - Retourne le répertoire racine du serveur spécifié dans le fichier de configuration du serveur. Cette variable renvoie généralement le chemin tel que /usr/yoursite/www sous Linux et D:/xamps/xampp/htdocs sous Windows.

3) $_SERVER['HTTP_Host'] - Renvoie le nom de l’hôte tel qu’il se trouve dans l’en-tête http. Cette variable retourne généralement le chemin comme example.com lorsque vous trouvez http://example.com dans la barre d’adresse du navigateur et renvoyez www.example.com lorsque vous voyez http://www.example.com dans la barre d’adresse. Ceci est très utile lorsque vous souhaitez conserver la session tout en effectuant un paiement en ligne en utilisant PHP, car la session stockée pour http://example.com n’est pas la même que pour le http://www.example.com.

4) $_SERVER['HTTP_USER_AGENT'] - Renvoie les détails de l’agent utilisateur (navigateur) accédant à la page Web. Nous pouvons utiliser strpos($_SERVER["HTTP_USER_AGENT"],”MSIE”) pour détecter Microsoft Internet Explorer ou vous pouvez utiliser strpos($_SERVER["HTTP_USER_AGENT"],”Firefox”) pour détecter le navigateur Firefox en PHP.

5) $_SERVER['PHP_SELF'] - Retourne le nom de fichier du script en cours d'exécution. Supposons que vous accédiez à l’URL http://www.example.com/product.php?id=5 puis $_SERVER['PHP_SELF'] renvoie /product.php dans votre script.

6) $_SERVER['QUERY_STRING'] - Renvoie la chaîne de requête si celle-ci est utilisée pour accéder au script en cours d'exécution. Les chaînes de requête sont celles qui sont disponibles après “?” Sign.Si vous utilisez $_SERVER['QUERY_STRING'] dans le script exécutant l'URL suivante http://www.example.com/index.php?id=5&page=product, il renvoie id=5&page=product dans votre script.

7) $_SERVER['REMOTE_ADDR'] - Retourne l'adresse IP de la machine distante accédant à la page en cours. Mais vous ne pouvez pas vous relâcher sur $_SERVER['REMOTE_ADDR'] pour obtenir la véritable adresse IP de la machine du client. Consultez cet article pour savoir comment obtenir de véritables adresses IP en PHP.

8) $_SERVER['SCRIPT_FILENAME'] - Retourne le chemin absolu du fichier en cours d'exécution. Il retourne un chemin comme var/example.com/www/product.php sous Linux et un chemin comme D:/xampp/xampp/htdocs/test/example.php sous Windows.

0
Foxsk8

Pour moi, <?php esc_url(the_permalink()); ?> fonctionne (sur une page d'archive avec une pagination).

0
Henning Fischer

add_query_args( null, null ) créera un élément de tableau avec une clé vide ($qs[""] = null) bien que cela n’affectera pas le résultat.


Selon add_query_arg () | Fonction | Ressources de développement WordPress , les deuxième et troisième paramètres sont facultatifs et peuvent être omis.

add_query_args( null, null ) peut être plus court .

$current_url = add_query_args( [] );

Il y a aussi la version la plus courte bien que cela ne soit pas recommandé car le 1er paramètre est le paramètre requis.

$current_url = add_query_args();

De plus, notez que home_url( add_query_vars( [] ) ) et home_url( add_query_arg( null, null ) ) risquent de ne pas renvoyer l'URL réelle lorsque WordPress est installé dans un sous-répertoire.

par exemple. https://example.com/wp/wp/foo peut être renvoyé lorsque WordPress est installé dans https://example.com/wp/.


Mise à jour: 2017/01/23

Ma version basée sur la solution de David pour obtenir une URL absolue.

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

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

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

wp_guess_url est ce que vous recherchez.

Devinez l'URL du site.

Supprime les liens wp-admin pour récupérer uniquement les URL de retour qui ne se trouvent pas dans le répertoire wp-admin.

0
Jesse