Obtener el enlace permanente de una página sin wpurl

2 nov 2011, 18:40:18
Vistas: 13.9K
Votos: 10

Actualmente tengo el ID de una página que quiero usar como parte frontal del permastruct de un CPT que estoy configurando.

Puedo usar get_permalink() pero eso devuelve la URL completa:

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

Pero solo quiero obtener imapage/subpage/subsubpage

¿Existe alguna función que pueda hacer esto o tengo que crear algo que reste la parte no necesaria de la URL?

1
Comentarios
Todas las respuestas a la pregunta 5
2
25

Ahora existe una función nativa para esto. wp_make_link_relative($url)

Convierte URLs completas en rutas relativas.

Elimina los protocolos http o https y el dominio. Mantiene la barra '/' al inicio, por lo que no es un enlace relativo verdadero, sino desde la raíz del sitio web.

Ejemplo

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

Esto mostrará /wp_test/sample-page/

Ejemplo con ID de entrada <?php echo wp_make_link_relative(get_permalink( $post->ID )); ?>

Ejemplo para la entrada actual <?php echo wp_make_link_relative(get_permalink()); ?>

Puedes encontrar más información en la documentación.

1 sept 2016 15:56:49
Comentarios

Esta respuesta debería marcarse como la correcta, porque utiliza una función auxiliar integrada del núcleo de WordPress: https://developer.wordpress.org/reference/functions/wp_make_link_relative/

sun sun
22 ene 2018 20:06:14

no es la mejor decisión, porque si iniciaste tu WP en localhost a través de MAMP y tienes múltiples proyectos en localhost/*, la respuesta de wp_make_link_relative(get_permalink()) será /wp_dir/category_slug

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

No hay una función incorporada para devolver la parte que necesitas, pero debería ser tan sencillo como usar la función home_url() y eliminar su salida de la URL completa, por ejemplo:

function get_relative_permalink( $url ) {
    // Reemplaza la URL base con una cadena vacía para obtener el permalink relativo
    return str_replace( home_url(), "", $url );
}
2 nov 2011 19:02:05
Comentarios

Llegué al mismo fragmento de código pero esperaba que hubiera alguna función ya en el núcleo que lo devolviera de la manera que quiero.

Scott Scott
2 nov 2011 19:29:41

Eso podría resultar en valores tal vez inesperados para multisitio o con WordPress instalado en un subdirectorio.

David David
1 sept 2016 17:50:41
0

No podrás usar get_permalink() para eso.

Si revisas el código de esa función en /wp-includes/link-template.php verás por qué. Después de que la estructura del enlace permanente es analizada y preparada, el código hace esto:

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

Esto se ejecuta inmediatamente después de crear la estructura del enlace y antes de que pase por algún filtro útil.

Así que desafortunadamente, tendrás que extraer la parte no deseada de la URL por ti mismo. Recomendaría usar la función str_replace() que sugirió @sanchothefat.

2 nov 2011 19:04:24
0

$path = parse_url(get_permalink(...), PHP_URL_PATH); ... devuelve solo la RUTA URL. Esta no es relativa a la raíz del blog sino al dominio. Es la URI absoluta.

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

wp_make_link_relative( string $enlace )

Elimina los protocolos http o https y el dominio. Mantiene la barra '/' al inicio, por lo que no es un enlace relativo verdadero, sino desde la base de la raíz del sitio web.

5 sept 2021 13:08:51