Ottenere il permalink di una pagina senza wpurl

2 nov 2011, 18:40:18
Visualizzazioni: 13.9K
Voti: 10

Attualmente ho l'ID di una pagina di cui voglio utilizzare il permalink come parte iniziale della permastruct di un CPT che sto configurando.

Potrei usare get_permalink() ma restituisce l'URL completo:

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

ma tutto ciò che voglio ottenere è imapage/subpage/subsubpage

Esiste una funzione che può fare questo o devo creare qualcosa che possa sottrarre la parte non necessaria dell'URL?

1
Commenti
Tutte le risposte alla domanda 5
2
25

In realtà esiste ora una funzione core per questo. wp_make_link_relative($url)

Converte percorsi URL completi in percorsi relativi.

Rimuove i protocolli http o https e il dominio. Mantiene il percorso '/' all'inizio, quindi non è un vero link relativo, ma dalla base della root web.

Esempio

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

Questo restituirà /wp_test/sample-page/

Esempio con ID Post <?php echo wp_make_link_relative(get_permalink( $post->ID )); ?>

Esempio per il post corrente <?php echo wp_make_link_relative(get_permalink()); ?>

Puoi trovare maggiori informazioni nella documentazione.

1 set 2016 15:56:49
Commenti

Questa risposta dovrebbe essere contrassegnata come quella corretta, perché utilizza una funzione helper integrata di WordPress Core: https://developer.wordpress.org/reference/functions/wp_make_link_relative/

sun sun
22 gen 2018 20:06:14

non è la decisione migliore, perché se hai avviato il tuo WP in localhost via MAMP e hai più progetti su localhost/*, la risposta a wp_make_link_relative(get_permalink()) sarà /wp_dir/category_slug

Gediminas Gediminas
16 giu 2019 13:32:18
2
11

Non esiste una funzionalità incorporata per restituire la parte desiderata, ma dovrebbe essere semplice come utilizzare la funzione home_url() e rimuoverne l'output dall'URL completo, ad esempio:

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

Sono arrivato allo stesso pezzo di codice ma speravo che ci fosse già una funzione nel core che lo restituisse nel modo che desidero.

Scott Scott
2 nov 2011 19:29:41

Ciò potrebbe portare a valori forse inaspettati per il multisite o con WordPress installato in una sottodirectory.

David David
1 set 2016 17:50:41
0

Non sarai in grado di utilizzare get_permalink() per questo.

Se esamini il codice di quella funzione in /wp-includes/link-template.php capirai il perché. Dopo che la struttura del permalink viene analizzata e preparata, il codice esegue questo:

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

Questo viene eseguito immediatamente dopo la creazione della struttura del link e prima che qualsiasi cosa venga passata attraverso un filtro utile.

Quindi, purtroppo, dovrai estrarre manualmente la parte non necessaria dell'URL. Ti consiglio di utilizzare la funzione str_replace() che @sanchothefat ha suggerito.

2 nov 2011 19:04:24
0

$path = parse_url(get_permalink(...), PHP_URL_PATH); ... restituisce solo il PERCORSO URL. Questo non è relativo alla radice del blog ma al dominio. È l'URI assoluto.

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

wp_make_link_relative( string $link )

Rimuove i protocolli http o https e il dominio. Mantiene il percorso '/' all'inizio, quindi non è un vero link relativo, ma dalla base della root web.

5 set 2021 13:08:51