web-dev-qa-db-fra.com

Obtenir la page permalink sans wpurl

Je dispose actuellement d'un identifiant de page que je souhaite utiliser comme lien permanent par-dessus un permastructure d'un CPT que je suis en train de configurer.

Maintenant, je peux utiliser get_permalink () mais cela renvoie l'URL complète:

http://www.example.com/imapage/subpage/subsubpage

mais tout ce que je veux retourner est imapage/subpage/subsubpage

Existe-t-il une fonction permettant de faire cela ou dois-je utiliser un périphérique capable de soustraire la partie non nécessaire de l'URL?

6
Brady

Rien n'est intégré pour renvoyer le bit que vous voulez mais cela devrait être aussi simple que d'utiliser la fonction home_url () et de supprimer sa sortie de l'URL complète, par exemple:

function get_relative_permalink( $url ) {
    return str_replace( home_url(), "", $url );
}
9
sanchothefat

Il existe actuellement une fonction essentielle pour cela. wp_make_link_relative($url)

Convertissez les chemins d’URL complets en chemins relatifs.

Supprime les protocoles http ou https et le domaine. Conserve le chemin '/' au début, ce n'est donc pas un vrai lien relatif, mais à partir de la base racine Web.

Exemple

<?php echo wp_make_link_relative('http://localhost/wp_test/sample-page/'); ?>

Ceci produira /wp_test/sample-page/

Exemple avec Post ID <?php echo wp_make_link_relative(get_permalink( $post->ID )); ?>

Exemple pour le message en cours <?php echo wp_make_link_relative(get_permalink()); ?>

Vous trouverez plus d'informations à ce sujet dans documentation .

10
Levi Cole

Vous ne pourrez pas utiliser get_permalink() pour cela.

Si vous creusez dans le code de cette fonction dans /wp-includes/link-template.php, vous comprendrez pourquoi. Une fois la structure permalien analysée et préparée, le code procède comme suit:

$permalink = home_url( str_replace($rewritecode, $rewritereplace, $permalink) );

Ceci est effectué immédiatement après la création de la structure du lien et avant que quoi que ce soit ne soit passé à travers un filtre utile.

Donc, malheureusement, vous devrez extraire vous-même la partie non nécessaire de l'URL. Je vous recommande d'utiliser la fonction str_replace() proposée par @sanchothefat.

4
EAMann

$path = parse_url(get_permalink(...), PHP_URL_PATH); ... donne le URL PATH only. Ce n'est pas relatif à la racine du blog mais au domaine. C'est l'URI absolu.

3
EarnestoDev