Obține permalink-ul unei pagini fără wpurl

2 nov. 2011, 18:40:18
Vizualizări: 13.9K
Voturi: 10

În prezent am ID-ul unei pagini pe care vreau să îl folosesc ca permalink în fața unei structuri permanente pentru un CPT pe care îl configurez.

Pot folosi get_permalink(), dar aceasta returnează întregul URL:

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

dar tot ce vreau să returnez este imapage/subpage/subsubpage

Există o funcție care poate face asta sau trebuie să concepi ceva care să scadă partea ne-necesară a URL-ului?

1
Comentarii

Asemănătoare: Obține Permalink fără domeniu (adică permalink relativ)

its_me its_me
28 aug. 2012 17:20:16
Toate răspunsurile la întrebare 5
2
25

Există de fapt o funcție de bază pentru asta acum. wp_make_link_relative($url)

Convertesc URL-uri complete în căi relative.

Elimină protocoalele http sau https și domeniul. Păstrează calea '/' la început, deci nu este o legătură relativă adevărată, ci pornind de la rădăcina web.

Exemplu

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

Aceasta va afișa /wp_test/sample-page/

Exemplu cu ID-ul postării <?php echo wp_make_link_relative(get_permalink( $post->ID )); ?>

Exemplu pentru postarea curentă <?php echo wp_make_link_relative(get_permalink()); ?>

Mai multe despre aceasta pot fi găsite în documentație.

1 sept. 2016 15:56:49
Comentarii

Acest răspuns ar trebui marcat ca fiind cel corect, deoarece utilizează o funcție helper încorporată în WordPress Core: https://developer.wordpress.org/reference/functions/wp_make_link_relative/

sun sun
22 ian. 2018 20:06:14

nu este cea mai bună decizie, deoarece dacă ai pornit WP-ul pe localhost prin MAMP și ai mai multe proiecte pe localhost/*, răspunsul la wp_make_link_relative(get_permalink()) va fi /wp_dir/category_slug

Gediminas Gediminas
16 iun. 2019 13:32:18
2
11

Nu există nicio funcționalitate încorporată pentru a returna partea dorită, dar ar trebui să fie la fel de simplu ca utilizarea funcției home_url() și eliminarea ieșirii sale din URL-ul complet, de exemplu:

function get_relative_permalink( $url ) {
    return str_replace( home_url(), "", $url );
}
2 nov. 2011 19:02:05
Comentarii

Am ajuns la aceeași bucată de cod, dar speram să existe deja în nucleu o funcție care să o returneze în modul dorit de mine.

Scott Scott
2 nov. 2011 19:29:41

Asta ar putea duce la valori neașteptate pentru multisite sau când WordPress este instalat într-un subdirector.

David David
1 sept. 2016 17:50:41
0

Nu vei putea folosi funcția get_permalink() pentru asta.

Dacă studiezi codul acestei funcții în fișierul /wp-includes/link-template.php, vei înțelege de ce. După ce structura permalink-ului este analizată și pregătită, codul face următoarele:

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

Această operațiune este efectuată imediat după crearea structurii link-ului și înainte ca orice să fie transmis printr-un filtru util.

Din păcate, va trebui să extragi manual partea nedorită din URL. Aș recomanda să folosești funcția str_replace() sugerată de @sanchothefat.

2 nov. 2011 19:04:24
0

$path = parse_url(get_permalink(...), PHP_URL_PATH); ... returnează doar CĂILEA URL. Aceasta nu este relativă la rădăcina blogului, ci la domeniu. Este URI-ul absolut.

2 nov. 2011 19:31:20
0
$relative_permalink = wp_make_link_relative(get_permalink($post->ID));

wp_make_link_relative( string $link )

Elimină protocoalele http sau https și domeniul. Păstrează calea '/' la început, deci nu este un link relativ adevărat, ci de la baza rădăcinii web.

5 sept. 2021 13:08:51