cómo obtener el ID de una página usando el slug de la página

13 jun 2013, 13:53:37
Vistas: 159K
Votos: 52

Soy bastante nuevo en WordPress y me preguntaba si podría obtener un page id con su slug. ¿Es posible? Por favor, háganmelo saber.

0
Todas las respuestas a la pregunta 7
6
76

Usa get_page_by_path($page_path):

$page = get_page_by_path( 'about' );
echo get_the_title( $page );

Esto devolverá un objeto de publicación regular.
Documentación:
https://developer.wordpress.org/reference/functions/get_page_by_path/
https://developer.wordpress.org/reference/functions/get_the_title/

13 jun 2013 13:57:54
Comentarios

¿Qué pasa si quiero el ID de una página secundaria?

freaky freaky
13 jun 2013 14:10:24

@freaky La función toma solo el slug de la página, no el slug del padre. Como los slugs son únicos, siempre obtendrás solo una página.

fuxia fuxia
13 jun 2013 14:12:26

Gracias, está funcionando y para la página secundaria tuve que navegar así $page = get_page_by_path( 'about/child' );

freaky freaky
13 jun 2013 14:15:38

Solo para aclarar, get_page_by_path utiliza internamente el campo post_name, no post_slug.

colefner colefner
9 abr 2018 22:04:07

Solo para confirmar, ¿esto usa la ruta de la página y no el nombre de la página, correcto? Entonces, para una página llamada "About us" el argumento debería ser "about-us", ¿correcto? ¿sin barras al principio ni al final?

user658182 user658182
25 jul 2018 19:01:46

Sí, @user658182

fuxia fuxia
25 jul 2018 21:57:30
Mostrar los 1 comentarios restantes
2
23

He estado usando esto ..

// Función para obtener el ID de una página por su slug
function get_id_by_slug($page_slug) {
    // Obtener la página por su slug (ruta)
    $page = get_page_by_path($page_slug);
    if ($page) {
        // Si la página existe, retornar su ID
        return $page->ID;
    } else {
        // Si no existe, retornar null
        return null;
    }
} 

Espero que esto ayude a alguien.

13 mar 2015 13:38:53
Comentarios

¿Por qué envolverlo en una función? get_page_by_path ya devuelve null…

GDY GDY
1 mar 2019 09:42:10

Porque la pregunta del OP quiere devolver el ID, no el objeto de la página.

user1158023 user1158023
16 oct 2019 17:34:01
0
11

Ya se ha preguntado y respondido en este foro. Estoy pegando el mismo código de allí. Usa esta función para obtener el ID de la página.

 function get_page_by_slug($page_slug, $output = OBJECT, $post_type = 'page' ) { 
  global $wpdb; 
   $page = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type= %s AND post_status = 'publish'", $page_slug, $post_type ) ); 
     if ( $page ) 
        return get_post($page, $output); 
    return null; 
  }
13 jun 2013 14:06:53
0

Existe una función url_to_postid desde WordPress v1.0.0 :) Esta tarea se puede lograr fácilmente usando esta función.

url_to_postid

Cuando la página es de nivel superior (top-level), solo se necesita proporcionar el slug.

Ejemplo: url_to_postid('slug');

Cuando la página está en un nivel inferior de jerarquía (es decir, tiene una página padre), debes anteponer el slug del padre separado por una barra diagonal así:

url_to_postid('parent-slug/child-slug');

Edición: si esto devuelve 0, deberías regenerar los enlaces permanentes (abre la página de enlaces permanentes en el administrador de WordPress) - esto solo es necesario una vez.

1 sept 2020 00:05:35
0

Tuve problemas con la respuesta elegida cuando intenté usar el código varias veces en la misma página. Seguía mostrando todo el contenido de mis páginas al mismo tiempo en cada instancia. Así que volví a pensar y se me ocurrió este enfoque más simple basado en la documentación del Códice de WordPress:

<?php $query = new WP_Query( array( 'pagename' => 'sobre-mi' ) );
    while ( $query->have_posts() ) {
        $query->the_post();
        echo '<h2>'. get_the_title() .'</h2>';
        the_content();
    }
    wp_reset_postdata();
?>

Quizás todavía pueda ser útil para alguien por ahí ;D

8 oct 2016 18:20:51
0

Muchas respuestas aquí parecen excesivamente complejas o no describen cómo obtener específicamente el ID de la página.

            $page = get_page_by_path("tu-slug-de-pagina");
            if ($page) {
                $page_id =  $page->ID;
                echo $page_id;
            }

En el ejemplo anterior hemos asignado el objeto de publicación a $page - Una vez que tienes el objeto de publicación puedes obtener cualquier información descrita aquí: https://codex.wordpress.org/Class_Reference/WP_Post

            $page->ID
            $page->post_status
            $page->post_title

y mucho más

6 abr 2019 00:47:07
0
<?php  function obtener_ID_pagina_por_slug( $slug ) {
    $pagina = get_page_by_path( $slug );
    if ( $pagina ) {
        return (int) $pagina->ID;
    }
    else {
        return null;
    }
}
?>

Espero que esta sugerencia sea útil para alguien.

31 may 2018 13:18:08