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

13

Existe-t-il une fonction WP pour obtenir automatiquement l'URL correcte de la page actuelle? Cela signifie que si je viens d'ouvrir un seul message, la fonction renvoie 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 renvoie la même chose que le get_pagenum_link(get_query_var('paged'))ferait.

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

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

Merci d'avance! Cordialement, René

René Schubert
la source

Réponses:

27

En plus de la réponse de Rajeev Vyas, vous n'avez pas besoin de passer de paramètres non vides à 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 $_SERVER[ 'REQUEST_URI' ]et s'applique urlencode_deep()à elle. Voir https://github.com/WordPress/WordPress/blob/3.8/wp-includes/functions.php#L673

Modifier: comme $_SERVER[ 'REQUEST_URI' ]représente une entrée utilisateur non filtrée, il faut toujours échapper la valeur de retour add_query_arg()lorsque le contexte est modifié. Par exemple, utilisez esc_url_raw()pour une utilisation DB ou esc_attr()ou esc_url()pour HTML.

Mise à jour

L'exemple illustré qui devrait créer un URI absolu (contenant le schéma et l'hôte) ne fonctionne pas sur un multisite avec des sous-répertoires, car home_url()cela retournerait l'URI complet, y compris un segment de chemin. Une meilleure solution pour le code multisite serait la suivante:

// 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 être suffisant.

David
la source
Frustrant que OP n'ait pas choisi cette réponse comme solution, ce qu'elle est. Je vous remercie.
cfx
3
global $wp;
$current_url = add_query_arg( $wp->query_string, '', home_url( $wp->request ) );

Pas une fonction, mais certainement en utilisant le code wordpress ..

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

Rajeev Vyas
la source
2
Cela fonctionne en partie, mais certaines choses ne fonctionnent pas comme je le veux: des paramètres comme yearsont ajoutés à la chaîne de requête, même s'ils n'y étaient pas auparavant, et d'autres paramètres, par exemple le replytocomparamètre, sont perdus. Connaissez-vous une solution à cela?
René Schubert
0

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=5pour accéder à la page, puis $_SERVER['REQUEST_URI']revient /product.php?id=5.

2) $_SERVER['DOCUMENT_ROOT']- Renvoie le répertoire racine du serveur qui est spécifié dans le fichier de configuration du serveur. Cette variable renvoie généralement le chemin d'accès comme /usr/yoursite/wwwsous Linux et D:/xamps/xampp/htdocsdans 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 renvoie généralement le chemin d'accès comme example.comlorsque vous le trouvez http://example.comdans la barre d'adresse du navigateur et retourne www.example.comlorsque vous le voyez http://www.example.comdans la barre d'adresse. Ceci est très utile lorsque vous devez conserver la session tout en effectuant un paiement en ligne en utilisant PHP car la session stockée pour http://example.comn'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']- Renvoie le nom de fichier du script en cours d'exécution. Supposons que vous accédez à l'URL, http://www.example.com/product.php?id=5puis $_SERVER['PHP_SELF']retourne /product.phpdans votre script.

6) $_SERVER['QUERY_STRING']- Renvoie la chaîne de requête si la chaîne de requête 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=productil retourne id=5&page=productdans votre script.

7) $_SERVER['REMOTE_ADDR']- Renvoie l'adresse IP de la machine distante accédant à la page actuelle. Mais vous ne pouvez pas $_SERVER['REMOTE_ADDR']bénéficier de la véritable adresse IP de la machine du client. Consultez cet article pour savoir comment obtenir de véritables compléments IP en PHP.

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

Foxsk8
la source
1
Gardez à l'esprit qu'aucun de ceux-ci n'est disponible dans votre CLI et donc inutile pour les tâches cron.
kaiser
0

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.

Jesse
la source
Cela renvoie une URL totalement différente de la page actuelle lorsque j'ai essayé de l'utiliser.
Kirby
0

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


Selon add_query_arg () | Fonction | WordPress Developer Resources , les 2e, 3e paramètres sont facultatifs et peuvent être omis.

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

$current_url = add_query_args( [] );

Il existe également la version la plus courte bien qu'elle ne soit pas recommandée car le 1er paramètre est le paramètre requis.

$current_url = add_query_args();

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

par exemple, https://example.com/wp/wp/foopeut être retourné lorsque WordPress est installé dans https://example.com/wp/.


Mise à jour: 23/01/2017

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([]);
Whizark
la source
0

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

Henning Fischer
la source
Impossible. the_permalink()fait écho au permalien échappé, il ne renvoie rien. Le esc_url()n'obtient rien, et si c'est le cas, ce serait une URL d'échappement.
fuxia
Vous avez raison, cela n'a fonctionné que grâce à la mise en cache de permaliens, je pense.
Henning Fischer
-1

Je n'ai pas maintenant de pagination mais vous pouvez utiliser cette fonction pour obtenir l'url dans la boucle

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

Ou bien si vous ne préférez pas utiliser php, vous pouvez également opter pour la méthode jquery ici (cela vous aidera à le faire fonctionner en dehors de la boucle)

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

ou si vous préférez utiliser la fonction php, vous devez obtenir l'id en dehors de la boucle

vaibhav
la source
1
Désolé, mais ce n'est tout simplement pas ce que j'ai demandé ... + the_permalink()n'a pas besoin de l'ID lorsqu'il est appelé dans la boucle.
René Schubert
2
Cette réponse avait très peu à voir avec la question d'origine. Il n'y a pas répondu correctement et n'a pas vraiment donné d'informations utiles sur le sujet.
jounileander
-2

Vous pouvez utiliser la fonction wordpress pour obtenir l'URL de la page actuelle

the_permalink()

Cela vous renverra le lien URL de la page curremt.

Vivek Pandey
la source
4
Presque; the_permalink()va imprimer l'URL du poste actuel. Mais cela ne fonctionnera pas pour d'autres demandes et n'inclura pas de variables comme la pagination. Ce n'est donc pas vraiment la réponse que cherche René Schubert.
TheDeadMedic