Existe alguma maneira de codificar os itens de menu personalizados quando o primeiro tema é instalado? Estou criando um tema que criará automaticamente algumas páginas comuns quando instalado. Então, eu preciso saber se também posso adicioná-los ao menu personalizado do Wordpress para que o cliente não precise adicioná-los manualmente?
Em outras palavras: como inserir / criar item de menu personalizado programaticamente?
Deixe-me saber se algo não está claro. Guia para a página apropriada do codex é bem-vindo. Obrigado!
update: código experimentado a partir daqui Menu específico de segmentação com wp_nav_menu_items
Registro do menu:
function register_my_menus() {
register_nav_menus(
array('main-menu' => __( 'Main Menu' ) )
);
}
add_action( 'init', 'register_my_menus' );
Uso do modelo:
<?php wp_nav_menu( array( 'theme_location' => 'main-menu' ) ); ?>
Código para adicionar novos itens:
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 );
ao adicionar o código para adicionar novos itens no menu nav em functions.php
nada de arquivo, acontece na página de menu no painel de administração, mas os itens de menu atuais desaparecem no site!
Fatal error: Cannot use object of type stdClass as array in C:\wamp\www\citystir\wp-admin\menu.php on line 25
. Mas o menu é criado e, quando a página é atualizada, tudo funciona, mas nada aparece naAppearance -> Menu Theme Location
seção. Estamos muito perto :) Obrigado!$locations = get_theme_mod('nav_menu_locations');
Portanto, os códigos anteriores a isso (toda a inserção do menu é concluída) são executados e o código depois (definir a localização do tema desejado) não é executado .Seu código original está muito próximo do dinheiro e eu acho seriamente que esta solução longa da @Bainternet (sem ofensa) é um exagero; portanto, dê uma olhada nisso:
Seu único problema era que você não retornava $ itens após a função ter verificado o menu correto e estava faltando o segundo argumento de retorno de chamada necessário para fazer a verificação ( $ args ).
fonte
Há um erro no Wordpress 3.4.2:
https://github.com/WordPress/WordPress/commit/ae96b842f9f55ecfb22da705a4902b9d25580259#wp-includes/nav-menu.php
Você precisa criar o termo relação manualmente:
Consulte https://gist.github.com/4148529 para obter um exemplo da classe Menu para criação simples de menus.
fonte
Para obter informações, o usuário atual tem direitos para adicionar termos, meus itens de menu foram criados, mas não foram adicionados na tabela wp_terms_relationship antes de adicionar uma chamada a wp_set_current_user (1);
fonte