¿Puedo agregar páginas a mi menú personalizado mediante un script?

26 mar 2011, 23:12:59
Vistas: 330
Votos: 1

Mi tema tiene una asignación de menú personalizado...

function my_register_my_menus() {
  register_nav_menus(
    array('header-menu' => __( 'Menú de encabezado personalizado' ) )
  );
}

...y estoy creando un plugin tipo "instalador" que, al activarse, me gustaría conectar a este menú personalizado y asignarle algunas páginas como si se hubieran creado manualmente.

Sin embargo, la API de menús es bastante nueva y hasta ahora no he podido encontrar ejemplos de cómo hacer esto.

Espero que alguien aquí pueda darme alguna dirección, ejemplos o información sobre cómo hacerlo.

Gracias de antemano :-)

0
Todas las respuestas a la pregunta 1
4

Puedes usar el hook wp_nav_menu_{$menu->slug}_items y añadir tu enlace con una función de callback, por ejemplo si el slug de tu menú es header-menu entonces algo como esto:

add_filter('wp_nav_menu_header-menu_items', 'add_my_extra_links',10,2);
function add_my_extra_links($items, $args) {
  $newitems = '<li><a title="Enlace de prueba" href="http://google.com">Google</a></li>';
  $newitems .= '<li><a title="Enlace de prueba" href="http://yahoo.com">Yahoo</a></li>';
  $newitems .= '<li><a title="Enlace de prueba" href="http://bing.com">Bing</a></li>';
  $newitems .= $items;
  return $newitems;
}

Actualización

Supongo que necesitarías llamar a wp_save_nav_menu_items que es la función usada para guardar los elementos del menú en la base de datos.

27 mar 2011 00:09:17
Comentarios

No puedo expresar lo agradecido que estoy de ver CUALQUIER señal de vida en esta pregunta. Sin embargo, hay algo: como esto es un filtro, no estoy seguro de que sea lo que estoy buscando. Necesito poder crear un menú mediante un script una sola vez, durante la activación del plugin, para que sea exactamente como si lo hubiera creado manualmente en el sitio, y que persista sin necesidad de un filtro en tiempo de ejecución. ¿Tiene sentido lo que digo?

Scott B Scott B
27 mar 2011 00:44:19

He actualizado mi pregunta para aclarar un poco. Me he dado cuenta de que no quedó claro que todo esto debe hacerse durante la activación del plugin (una sola vez y listo).

Scott B Scott B
27 mar 2011 00:52:40

@Scott: actualicé mi respuesta rápidamente porque es muy tarde aquí y estoy medio dormido, pero debería ayudarte a avanzar.

Bainternet Bainternet
27 mar 2011 01:15:21

+1 por tu ayuda hasta ahora. Me has dado un 100% más de lo que tenía antes de que respondieras :-)

Scott B Scott B
27 mar 2011 02:25:29