cómo obtener el ID de una página usando el slug de la página
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/

@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.

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

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

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?

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.

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;
}

Existe una función url_to_postid desde WordPress v1.0.0 :) Esta tarea se puede lograr fácilmente usando esta función.
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.

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

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
