Como posso acessar a "descrição" de um item de menu?
-
-
Por que vocênão usa otrecho depágina?Why don’t you use the page excerpt?
- 0
- 2013-01-06
- fuxia
-
Porqueeupreciso usá-lonomenutambém,quando WP_NAV_MENU é chamado.Eutenho um caminhantepersonalizado.because I need to use it in the menu as well, when wp_nav_menu is called. I have a custom walker.
- 0
- 2013-01-06
- Claire
-
@Toscho como acontece,preciso usar otrechoparaisso agora.Vocêpoderia dar uma olhadaem [estapergunta] (http://wordpress.stackexchange.com/Questions/78723/how-Portal-get-the-excerpt-in-nav-menu-walker) Porfavor?@toscho As it turns out I need to use the excerpt this now. Could you take a look at [this question](http://wordpress.stackexchange.com/questions/78723/how-to-get-the-excerpt-in-nav-menu-walker) please?
- 0
- 2013-01-08
- Claire
-
2 respostas
- votos
-
- 2013-01-06
Eunãogosto daideia de analisar ositens domenunovamente. Como uma solução alternativa,sugiro armazenar a descrição durante aprimeiraexecução:
add_filter ('walker_nav_menu_start_el','wpse_78483_get_current_items_description',10,2); /** * Obtenhaitens denavegação. * * @ wp-hook walker_nav_menu_start_el * @param string $item_Output * @param objeto $item * string @return. */ função wpse_78483_get_current_items_description ($item_Output=null,$item=null) { ESTÁTICO $ desc=''; //Afunçãonão é chamada durante a renderização domenu NAV,mas depois. if ('walker_nav_menu_start_el'!==Current_Filter ()) Voltar $ Desci; //Afunção é chamada durante WP_NAV_MENU (). //description é definido Se (! vazio ($item- > descrição) //e um URLestá disponível e ! vazio ($item- > url) //e é apágina atual e parse_url ($item- > url,php_url_path)===$ _Server ['solicitar_uri'] ) { //Copie a descriçãoem nossa variávelinternaestática $ Desc=$item- > descrição; //removerestefiltro,não énecessáriomais remove_filter ('walker_nav_menu_start_el',__function__); } //retorna amarcação deitem inalterado Retornar $ Item_Output; }
Explicação
Afunçãofaz duas coisas:
- .
- Atua como umfiltro chamado dentro de
wp_nav_menu ()
. Aqui,é chamado até que atinge apágina atual. Em seguida,a descrição é armazenadainternamenteem$ Desc
. - age como umgetterpara a descrição: Se você chamaressafunção semparâmetros após Omenu denavegaçãofoi renderizado,obtém o valor da descrição,se houver um.
A desvantagem é:nãofuncionariapara uma chamada demenutarde demais,em um rodapé,porexemplo.
A vantagem: vocêeconomizatempo.Vocêpode obter a descriçãomaistarde,qualquermomento,chamando afunção sem umparâmetro:
Imprimir WPSE_78483_GET_CURRENT_ITEMS_Description ();
Como acompanhamento,aquiestá uma segundamaneira de usá-lo:
$ Desc=wpse_78483_get_current_items_description (); Se (vazio (desconhecido)) { the_excert (); } outro { Imprimir WPautop ($ Descreva); }
Dicaextra: vocêpode ativar a caixa do Editor de Excertosparapáginas:
add_action ('wp_loaded','wpse_78483_page_excerpt'); Função WPSE_78483_PAGE_EXCERTT () { add_post_type_support ('Page','Excerpt'); }
I don’t like the idea to parse the menu items again. As an alternative solution I suggest to store the description during the first run:
add_filter( 'walker_nav_menu_start_el', 'wpse_78483_get_current_items_description', 10, 2 ); /** * Get nav items description. * * @wp-hook walker_nav_menu_start_el * @param string $item_output * @param object $item * @return string */ function wpse_78483_get_current_items_description( $item_output = NULL, $item = NULL ) { static $desc = ''; // The function is NOT called during nav menu rendering, but later. if ( 'walker_nav_menu_start_el' !== current_filter() ) return $desc; // The function is called during wp_nav_menu(). // description is set if ( ! empty ( $item->description ) // and an URL is available and ! empty ( $item->url ) // and it is the current page and parse_url( $item->url, PHP_URL_PATH ) === $_SERVER['REQUEST_URI'] ) { // copy the description into our static internal variable $desc = $item->description; // remove this filter, it is not needed anymore remove_filter( 'walker_nav_menu_start_el', __FUNCTION__ ); } // return unchanged item markup return $item_output; }
Explanation
The function does two things:
- It acts as a filter called inside of
wp_nav_menu()
. Here, it is called until it hits the current page. Then the description is stored internally in$desc
. - It acts as a getter for the description: If you call this function without parameter after the navigation menu has been rendered you get the value of the description, if there is one.
The downside is: it would not work for a menu call too late, in a footer for example.
The advantage: you save time.You can get the description later any time by calling the function without a parameter:
print wpse_78483_get_current_items_description();
As a follow-up, here is a second way to use it:
$desc = wpse_78483_get_current_items_description(); if ( empty ( $desc ) ) { the_excerpt(); } else { print wpautop( $desc ); }
Extra tip: You can enable the excerpt editor box for pages:
add_action( 'wp_loaded', 'wpse_78483_page_excerpt' ); function wpse_78483_page_excerpt() { add_post_type_support( 'page', 'excerpt' ); }
-
obrigada.Eu realmentenãoentendo comofunciona,masisso acontece!thank you. I don't really understand how it works but it does so thanks!
- 0
- 2013-01-06
- Claire
-
@Nicola desculpe,vocêestá certo.Eufiz uma atualização com umaexplicaçãomelhore Docs Inline.@Nicola Sorry, you are right. I have made an update with a better explanation and inline docs.
- 1
- 2013-01-06
- fuxia
-
Obrigado,eu atualizeiminhaperguntaparamostrar queeu quero quetodas aspáginas armazenem otexto altnotrechothanks, I updated my question to show that I want all pages to store the alt text in excerpt
- 0
- 2013-01-08
- Claire
-
- 2013-01-06
Encontrei a respostaem um site do Googleem cache.
Então,para acessar a descrição doitem denavegação dapágina atual -basta ligarpara afunção
echo wps_get_menu_description()
function wps_get_menu_description( ) { global $post; // Default $defaults = array( 'echo' => false, 'format' => '', 'description' => '', 'location' => 'primary', 'classes' => 'post-description' ); $args = wp_parse_args( $args, $defaults ); extract( $args , EXTR_SKIP ); // Get menu $menu_locations = get_nav_menu_locations(); $nav_items = wp_get_nav_menu_items( $menu_locations[ $location ] ); // Cycle through nav items foreach ( $nav_items as $nav_item ) { if ( ( is_page() || is_single() || is_archive() ) && ( $nav_item->object_id == $post->ID ) ) { $description = $nav_item->description; } } $output = $description; return $output; }
Found the answer on a google cached website.
So to access the current page's navigation item description - just call the function
echo wps_get_menu_description()
function wps_get_menu_description( ) { global $post; // Default $defaults = array( 'echo' => false, 'format' => '', 'description' => '', 'location' => 'primary', 'classes' => 'post-description' ); $args = wp_parse_args( $args, $defaults ); extract( $args , EXTR_SKIP ); // Get menu $menu_locations = get_nav_menu_locations(); $nav_items = wp_get_nav_menu_items( $menu_locations[ $location ] ); // Cycle through nav items foreach ( $nav_items as $nav_item ) { if ( ( is_page() || is_single() || is_archive() ) && ( $nav_item->object_id == $post->ID ) ) { $description = $nav_item->description; } } $output = $description; return $output; }
Sempre que vocêpossa adicionar seumenuem aparência> Menus,tenho descrições. Naminhapágina,quero ser capaz deecoaressa descrição. Nãonomenu,masnaminhapágina. Comoposso acessaressasinformações?
editar:
@toscho
Comoeueditomeu caminhantepersonalizado? O objeto $item tem acesso àpáginatrecho?