2012-07-09 8 views
6

मैंने इस कोड के साथ मेनू आइटम बनाया है। मेनू आइटम दिखाता है लेकिन शोर्ट आउटपुट वहां नहीं है। क्या कोई ऐसा जोड़ा है जो मैं जोड़ सकता हूं या एक अलग तरीका जो यह करेगा। मैंने उम्मीदों में भी जोड़ा है इससे मदद मिल सकती है।वर्डप्रेस मेनू में शोर्ट कैसे डालें

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

या शायद कोई जानता है कि यह संभव नहीं है और मुझे बता सकता है।

/* 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; 
} 

धन्यवाद

उत्तर

6

आप पर मेनू URL में सीधे शॉर्टकोड का उपयोग नहीं कर सकते मेनू पेज, क्योंकि ब्रैकेट अलग हो जाते हैं। लेकिन आप इस तरह प्लेसहोल्डर का उपयोग कर सकते हैं: #profile_link#

functions.php में निम्न कोड के साथ, आप URL #profile_link# URL के साथ एक कस्टम मेनू आइटम बना सकते हैं, और यह आपके शोर्ट के साथ इसे प्रतिस्थापित करेगा।

/** 
* 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'); 

तुम बस और $placeholders सरणी में 'shortcode' निर्धारित करने की आवश्यकता, वैकल्पिक रूप से 'atts' और 'content'

उदाहरण के लिए, यदि आपके शोर्ट इस तरह है:

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

आप उन्हें अपडेट होगा:

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

ध्यान दें कि मैं don't use do_shortcode() क्योंकि एक संसाधन गहन कार्य है यह और नहीं है इस मामले में नौकरी के लिए सही उपकरण।

+0

वाह जो वास्तव में काम करता था, लंबे समय से देख रहा था इसके लिए। बहुत धन्यवाद जेडी – xyz

+0

बस जो मैं खोज रहा था, धन्यवाद! – hotshots

+0

@ जेडी। - हाय, मैं इस कोड को अपने कोड में जोड़ने की कोशिश कर रहा हूं, लेकिन यह काम नहीं करेगा ([आईपी: जीबी] 020 7267 5222 [/ आईपी])। क्या आप कृपया मेरी मदद कर सकते हैं –

13

@Tim इस कोड

काम करेंगे functions.php फ़ाइल में रख

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

@ टिम आप उस कोड के लिए कोई वैकल्पिक तर्क जोड़ सकते हैं, मैं केवल आपको मूलभूत –

+0

धन्यवाद देता हूं, धन्यवाद, मैं आपको धन्यवाद देता हूं – xyz

+0

@ टिम आपका स्वागत है :) –

संबंधित मुद्दे