2012-07-09 11 views
6

He hecho un elemento de menú con este código. Aparece el elemento del menú, pero la salida del shortcode no está allí. ¿Hay algo que pueda agregar o un método diferente que lo haga? He añadido también con la esperanza de que esto pueda ayudar.cómo insertar shortcode en el menú de wordpress

add_filter('wp_nav_items', 'do_shortcode', 7); 

O tal vez alguien sabe que esto no es posible y puede decirme.

/* Nav Menu */ 
function add_profile_link_to_nav(){ 
if (is_user_logged_in()) { ?> 

<ul> 
    <li class="menu-item"id="one"> <a href="http://example.com/members/">All Members</a> 
    <ul class="sub-menu"> 
     <li class="menu-item"><?php echo custom_execute_shortcode(); ?> </li> 
    </ul> 
</li> 
</ul> <!--end menu---> 
<?php } 
} 
add_action("wp_nav_items","add_profile_link_to_nav"); 

function custom_execute_shortcode() { 
$myfunction= '[my shortcode"]'; 
$myfunction_parsed = do_shortcode($myfunction); 
return $myfunction_parsed; 
} 

Gracias

Respuesta

6

No puede utilizar códigos cortos directamente en el menú de la URL página de menú, porque los corchetes se eliminan. Pero puede usar marcadores de posición como este: #profile_link#.

Con el siguiente código en functions.php, puede crear un elemento de menú personalizado con la URL #profile_link#, y lo reemplazará con su código breve.

/** 
* Filters all menu item URLs for a #placeholder#. 
* 
* @param WP_Post[] $menu_items All of the nave menu items, sorted for display. 
* 
* @return WP_Post[] The menu items with any placeholders properly filled in. 
*/ 
function my_dynamic_menu_items($menu_items) { 

    // A list of placeholders to replace. 
    // You can add more placeholders to the list as needed. 
    $placeholders = array(
     '#profile_link#' => array(
      'shortcode' => 'my_shortcode', 
      'atts' => array(), // Shortcode attributes. 
      'content' => '', // Content for the shortcode. 
     ), 
    ); 

    foreach ($menu_items as $menu_item) { 

     if (isset($placeholders[ $menu_item->url ])) { 

      global $shortcode_tags; 

      $placeholder = $placeholders[ $menu_item->url ]; 

      if (isset($shortcode_tags[ $placeholder['shortcode'] ])) { 

       $menu_item->url = call_user_func( 
        $shortcode_tags[ $placeholder['shortcode'] ] 
        , $placeholder['atts'] 
        , $placeholder['content'] 
        , $placeholder['shortcode'] 
       ); 
      } 
     } 
    } 

    return $menu_items; 
} 
add_filter('wp_nav_menu_objects', 'my_dynamic_menu_items'); 

sólo tiene que establecer 'shortcode' en la matriz $placeholders, y opcionalmente 'atts' y 'content'.

Por ejemplo, si su código corto es así:

[example id="5" other="test"]Shortcode content[/example] 

actualizaría:

'#placeholder#' => array(
    'shortcode' => 'example'; 
    'atts' => array('id' => '5', 'other' => 'test'); 
    'content' => 'Shortcode content'; 
), 

Nota que don't use do_shortcode() porque es una función que consume muchos recursos y no es la herramienta correcta para el trabajo en este caso.

+0

Wow que realmente funcionó, estado buscando por mucho tiempo para esto. Muchas Gracias J.D – xyz

+0

Justo lo que estaba buscando, ¡gracias! – hotshots

+0

@ J.D. - Hola, estoy tratando de agregar este código corto en tu código, pero no funcionará ([ip: GB] 020 7267 5222 [/ ip]). Puede ayudarme por favor –

13

@Tim Este código funcionará

la pusieron en el archivo functions.php

add_filter('wp_nav_menu_items', 'do_shortcode'); 
+0

@Tim usted puede agregar cualquier args opcional para ese código, solo le doy el básico –

+0

Gracias usama Agradezco la respuesta – xyz

+0

@Tim Usted es bienvenido :) –

Cuestiones relacionadas