¿Hay alguna forma de codificar los elementos del menú personalizado cuando se instala el primer tema? Estoy creando un tema que creará automáticamente algunas páginas comunes cuando esté instalado. ¿Entonces necesito saber si también puedo agregarlos al menú personalizado de Wordpress para que el cliente no necesite agregarlos manualmente?
En otras palabras: ¿cómo insertar / crear un elemento de menú personalizado mediante programación?
Avísame si algo no está claro. Guía de la página del códice correspondiente es bienvenida. ¡Gracias!
actualización: código probado desde aquí Orientación del menú específico con wp_nav_menu_items
Registro de menú:
function register_my_menus() {
register_nav_menus(
array('main-menu' => __( 'Main Menu' ) )
);
}
add_action( 'init', 'register_my_menus' );
Uso de plantilla:
<?php wp_nav_menu( array( 'theme_location' => 'main-menu' ) ); ?>
Código para agregar nuevos elementos:
function new_nav_menu_items($items) {
if( $args->theme_location == 'main-menu' ){
$homelink = '<li class="home"><a href="' . home_url( '/' ) . '">' . __('Home') . '</a></li>';
$items = $homelink . $items;
return $items;
}
}
add_filter( 'wp_nav_menu_items', 'new_nav_menu_items', 10, 2 );
Al agregar el código para agregar nuevos elementos en el menú de navegación en el functions.php
archivo, nada sucede en la página del menú en el panel de administración, pero los elementos del menú actual se han ido al sitio.
Fatal error: Cannot use object of type stdClass as array in C:\wamp\www\citystir\wp-admin\menu.php on line 25
. Pero el menú se crea y cuando la página se actualiza todo funciona, pero no se muestra nada en laAppearance -> Menu Theme Location
sección. Estamos muy cerca :) ¡Gracias!$locations = get_theme_mod('nav_menu_locations');
Entonces, los códigos anteriores (se realiza toda la inserción del menú) se ejecutan y el código posterior (establecer la ubicación del tema deseado) no se ejecuta .Su código original está muy cerca del dinero y creo seriamente que esta solución larga de @Bainternet (sin ofender) es exagerada, así que eche un vistazo a esto:
Su único problema fue que no estaba devolviendo $ items después de que la función verificó el menú correcto, y le faltaba el segundo argumento de devolución de llamada que era necesario para hacer la verificación ( $ args ).
fuente
Hay un error en Wordpress 3.4.2:
https://github.com/WordPress/WordPress/commit/ae96b842f9f55ecfb22da705a4902b9d25580259#wp-includes/nav-menu.php
Necesita crear el término relación manualmente:
Consulte https://gist.github.com/4148529 para ver un ejemplo de la clase Menú para la creación simple de menús.
fuente
Para obtener información, el usuario actual tiene derechos para agregar términos, mis elementos de menú se crearon pero no se agregaron en la tabla wp_terms_relationship antes de agregar una llamada a wp_set_current_user (1);
fuente