Cómo verificar si existe un menú en WordPress
Actualmente estoy recuperando un menú de navegación basado en el título de la página padre, y si la página no tiene padre, uso su propio título.
global $post;
$page_title;
if ($post->post_parent) {
$page_title = get_the_title($post->post_parent);
} else {
$page_title = get_the_title($post);
}
$sidebar_title = 'Sidebar - '.$page_title;
wp_nav_menu(array( 'menu' => $sidebar_title));
En lugar de verificar primero si existe un padre, me gustaría comprobar primero si una página tiene su propio menú único. Esto es lo que escribí pero no funciona:
global $post;
$page_title = get_the_title($post);
$sidebar_title = 'Sidebar - '.$page_title;
if ( !wp_nav_menu(array( 'menu' => $sidebar_title, 'echo' => false )) ) {
$page_title = get_the_title($post->post_parent);
$sidebar_title = 'Sidebar - '.$page_title;
}
wp_nav_menu(array( 'menu' => $sidebar_title ));
Resumen: ¿Cómo puedo verificar si existe un menú?

Asumiendo que tienes menús de navegación personalizados implementados correctamente:
Registrar ubicaciones de menú en el tema:
register_nav_menus( array( 'parent_page' => "Página Principal", 'page_a' => "Página A", 'page_b' => "Página B", //etc ) );
Llamar a
wp_nav_menu()
correctamente:wp_nav_menu( array( 'theme_location' => 'page_a' );
...entonces puedes usar el condicional has_nav_menu()
para determinar si una Ubicación de Tema tiene un menú asignado:
if ( has_nav_menu( 'page_a' ) ) {
// hacer algo
}
En tu caso específico, podrías hacer algo como esto:
if ( has_nav_menu( 'page_a' ) ) {
wp_nav_menu( array( 'theme_location' => 'page_a' ) );
} else {
wp_nav_menu( array( 'theme_location' => 'parent_page' ) );
}

Gracias por tu respuesta. Este es el primer sitio web que he desarrollado usando Wordpress, y no estaba al tanto de la necesidad de registrar mis menús de navegación. Leí el material que sugeriste. Aún así, pude resolver mi problema sin registrarlos. Creo que funciona para mis propósitos ya que mi cliente no necesitará la capacidad de gestionar las ubicaciones de los menús de navegación.
Si crees que esto me causará problemas en el futuro, por favor házmelo saber.

"mi cliente no necesitará la capacidad de gestionar las ubicaciones de los menús de navegación" - entonces ¿por qué tener menús de navegación en absoluto? (No: en serio.) ¿Por qué no simplemente usar wp_list_pages()
o wp_page_menu()
? Porque si el usuario no está definiendo menús de navegación, entonces literalmente no hay ninguna razón para usar wp_nav_menu()
.

También: estoy confundido por el título de tu pregunta: ¿cómo saber si un menú existe?. Si el usuario no está definiendo menús, ¿cómo van a existir menús nunca? Sospecho que hay algo más, más profundo, que realmente estás tratando de lograr - y sospecho que probablemente haya una forma más fácil que la forma en que lo estás abordando actualmente. :)

Aunque mi cliente no administrará la ubicación de los menús, aún tendrá la capacidad de agregar nuevos elementos a esos menús si así lo desea.

Tengo varias páginas en el sitio y cada página principal tiene un menú de navegación único. Algunas páginas secundarias también tienen menús de navegación únicos, pero no todas. Para aquellas páginas secundarias que no tienen menús de navegación únicos, quiero que utilicen el menú de navegación de su página principal. Entonces, lo que estoy verificando es si el menú de navegación único existe para poder mostrarlo, y si la página no tiene un menú de navegación único, entonces quiero mostrar el menú de navegación de su página principal.

Creo que estoy haciendo algo similar al OP: permitir que mi cliente (usuario administrador de WP) cree Menús (en WP-Admin > Apariencia > Menús), los cuales NO están asignados a una ubicación específica del tema, porque eso requeriría una relación estática/uno a uno.
En cambio, estos Menús se muestran dinámicamente (a través de un widget personalizado), basándose en el nombre del ancestro superior de la página actual. Si ese nombre coincide con el nombre de un Menú existente, se muestra el Menú (envuelto por el HTML estándar before/after del widget). Pero, si NO hay coincidencia, no se muestra nada.
Así que necesitaba verificar si el Menú existe, antes de comenzar la salida del widget.
$args = array(
'menu' => $menu_name, // del ancestro superior de la página actual
'echo' => 0, // true o 0
'theme_location' => '__fake', // valor falso, para evitar mostrar el primer menú real
'fallback_cb' => false // evitar mostrar el primer menú real
);
$menu = wp_nav_menu( $args );
if ($menu){
# salida
echo $before_widget; // Before
echo $before_title . $title . $after_title; // Title
echo $menu;
echo $after_widget; // After
}
