Holen Sie sich Seite Permalink ohne wpurl

8

Ich habe derzeit eine ID einer Seite, deren Permalink ich als Vorderseite einer Permastruktur eines von mir eingerichteten CPT verwenden möchte.

Jetzt kann ich get_permalink () verwenden, aber das gibt die vollständige URL zurück:

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

aber alles was ich zurückgeben möchte ist imapage/subpage/subsubpage

Gibt es eine Funktion, die dies kann, oder muss ich etwas einrichten, das den nicht benötigten Teil der URL subtrahieren kann?

Scott
quelle

Antworten:

10

Es ist nichts eingebaut, um das gewünschte Bit zurückzugeben, aber es sollte so einfach sein, wie die Funktion home_url () zu verwenden und die Ausgabe aus der vollständigen URL zu entfernen, z.

function get_relative_permalink( $url ) {
    return str_replace( home_url(), "", $url );
}
Sanchothefat
quelle
Ich bin zum selben Code gekommen, habe aber auf eine Funktion gehofft, die bereits im Kern vorhanden ist und diese so zurückgibt, wie ich es möchte.
Scott
Dies führt möglicherweise zu unerwarteten Werten für Multisite oder wenn WordPress im Unterverzeichnis installiert ist.
David
15

Es gibt jetzt tatsächlich eine Kernfunktion dafür. wp_make_link_relative($url)

Konvertieren Sie vollständige URL-Pfade in relative Pfade.

Entfernt die http- oder https-Protokolle und die Domäne. Behält den Pfad '/' am Anfang bei, sodass es sich nicht um einen echten relativen Link handelt, sondern um die Web-Root-Basis.

Beispiel

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

Dies wird ausgegeben /wp_test/sample-page/

Beispiel mit Post ID <?php echo wp_make_link_relative(get_permalink( $post->ID )); ?>

Beispiel für aktuellen Beitrag <?php echo wp_make_link_relative(get_permalink()); ?>

Mehr dazu finden Sie in der Dokumentation .

Levi Cole
quelle
1
Diese Antwort sollte als richtig gekennzeichnet werden, weil es eine eingebaute in Helferfunktion von Wordpress - Kern verwendet: developer.wordpress.org/reference/functions/...
Sonne
nicht die beste Entscheidung, denn wenn Sie Ihre WP in localhost über MAMP gestartet werden und Sie mehrere Projekte auf localhost / * haben, die Antwort auf wp_make_link_relative(get_permalink())sein/wp_dir/category_slug
Gediminas
4

Sie werden dafür nicht in der Lage sein get_permalink().

Wenn Sie sich in den Code für diese Funktion /wp-includes/link-template.phpvertiefen , werden Sie sehen, warum. Nachdem die Permalink-Struktur analysiert und vorbereitet wurde, führt der Code Folgendes aus:

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

Dies erfolgt unmittelbar nach dem Erstellen der Linkstruktur und bevor etwas durch einen nützlichen Filter geleitet wird.

Leider müssen Sie den nicht benötigten Teil der URL selbst extrahieren. Ich würde empfehlen, die von str_replace()@sanchothefat vorgeschlagene Funktion zu verwenden.

EAMann
quelle
3

$path = parse_url(get_permalink(...), PHP_URL_PATH);... gibt nur den URL-Pfad an . Dies bezieht sich nicht auf das Blog-Stammverzeichnis, sondern auf die Domain. Es ist die absolute URI.

EarnestoDev
quelle