क्या पेज या पोस्ट के साथ कस्टम मेनू लिंक को बदलने का एक आसान तरीका है?


14

मैंने प्लगइन्स की तलाश की है और कुछ भी नहीं मिल सका है और मेरा मानना ​​है कि यह एक मुख्य विशेषता होनी चाहिए।

समस्या:

एक कस्टम लिंक या किसी भी मेनू लिंक को बदलने के लिए वर्तमान कार्यप्रणाली निम्नलिखित प्रक्रिया करके है:

  1. पुराने मेनू लिंक को हटा दें
  2. नया लिंक डालें
  3. सूची के अंत से नया लिंक खींचें
  4. इच्छित स्थान पर नई लिंक ड्रॉप करें
  5. जैकपॉट को हिट करने तक चरण 3 और 4 को दोहराएं
  6. मेनू विकल्प फिर से दर्ज करें (सीएसएस, लेबल आदि)

यह एक समस्या क्यों है

यह बहुत ही अयोग्य है, खासकर जब: (ए) बहुत सारे मेनू (ख) के साथ विशाल मेनू (बी) मेनू से निपटने के लिए कई मेनू आइटम की जगह होती है जिसमें कस्टम विकल्प होते हैं

समाधान की आवश्यकताएं

  1. मेनू स्थिति / पदानुक्रम को बनाए रखता है
  2. रिटेन ऑप्शन (सीएसएस क्लास, लेबल, शीर्षक)
  3. पेज / पोस्ट / श्रेणियाँ आदि से चुनें

प्रदर्शन

http://puu.sh/laSEi/81b0d41705.png

सरल होना चाहिए:

यहाँ छवि विवरण दर्ज करें

अन्य संभावित विचार डुप्लिकेट कर रहे हैं / "इस में चाइल्ड लिंक जोड़ें" / या नीचे के बजाय सूची के शीर्ष पर नए लिंक जोड़ रहे हैं।

किसी भी प्रतिक्रिया की सराहना की।


4
एक अच्छी तरह से तैयार किए गए प्रश्न के लिए +1 - मैं आपसे सहमत हूं, यह बहुत कुशल नहीं है।
बीरगिरे

3
इस प्रश्न के साथ समस्या यह है कि मुझे इस समस्या का कोई सरल समाधान दिखाई नहीं देता है जो यहां प्रारूप को फिट कर सकता है। संभवतः कई क्षेत्रों में कुछ कार्यक्षमता समायोजन करने की आवश्यकता है। मैं ट्रेस में इसके लिए एक टिकट खोलने का सुझाव देता हूं क्योंकि यह एक योग्य सुविधा अनुरोध जैसा लगता है।
मार्क कप्लून

1
हो सकता है कि आप TinyMCE से URL फ़ील्ड में पोस्ट, पेज wplink.js
21

1
@MarkKaplun मुझे लगा कि कोई व्यक्ति इसके लिए एक अलोकप्रिय या अन्यथा निजी प्लगइन को जान सकता है, वैसे भी, मैंने आपके सुझाव का पालन किया और trac request @ core.trac.wordpress.org/ticket/34648 बनाया, जो इस सवाल का स्टैकएक्सचेंज पर अंत करने का एक उचित तरीका है। ?
अजीज

2
इसे समाप्त न करें, सभी प्रश्नों का स्वीकार्य या मान्य उत्तर नहीं है। कुछ बार यह जानना अच्छा है कि अन्य लोग भी इसी मुद्दे को देख रहे थे और उन्हें कोई जवाब नहीं मिला, कभी-कभी कोई बहुत देर से जवाब देता है
मार्क कप्लून

जवाबों:


1

हालांकि यह सीधे सवाल का जवाब नहीं देता है, जिस कोड पर यह आधारित है वह कार्यक्षमता प्रदान करता है। कोड सेट है:

समारोह install_menus () {
    आवश्यकता_ऑनलाइन dirname (__FILE__)। '/Data.php';
    $ मेनू = get_menus_data ();
    अगर (खाली ($ मेनू)) foreach ($ मेनू के रूप में $ मेनू) {
        अगर ($ मेनू ['बिल्ड')) {
            $ menu_id = create_nav_menu ($ मेनू);
            add_items_to_menu ($ menu_id, $ मेनू ['स्लग'], $ मेनू ['आइटम']);
        }
    }
}

फ़ंक्शन create_nav_menu ($ मेनू) {
    अगर ($ मौजूद है = wp_get_nav_menu_object ($ मेनू ['नाम'))) {
        $ menu_id = $ मौजूद है -> term_id;
          अगर (खाली (मेनू मेनू)) {
            $ menu_id = wp_create_nav_menu ($ मेनू ['नाम']);
        } 
    }
    अन्य {
        $ menu_id = wp_create_nav_menu ($ मेनू ['नाम']);
    }
    $ मेन्‍यू_दो लौटें;
}
फ़ंक्शन add_items_to_menu ($ menu_id, $ slug, $ आइटम) {
    अगर ($ आइटम) foreach ($ आइटम के रूप में $ आइटम) {
        अगर ($ आइटम ['बिल्ड']) {
            $ स्लग = ($ आइटम ['शीर्षक'] == 'होम')? 'घर': $ आइटम ['स्लग'];
            अगर (menu_item_exists ($ स्लग, $ menu_id)) {
                wp_update_nav_menu_item ($ menu_id, 0, सरणी)
                    'मेनू-आइटम-शीर्षक' => __ ($ आइटम ['शीर्षक']),
                    'मेनू-आइटम-कक्षाएं' => '',
                    'मेनू-आइटम-url' => home_url ($ आइटम ['स्लग']। '/'),। 
                    'मेनू-आइटम-स्थिति' => 'प्रकाशित'
                    ));
            }
        }
    }
}
फ़ंक्शन मेनू_इटेम_एक्सिस्ट ($ स्लग, $ मेनू_आईडी) {
    $ args = सरणी (
        'आदेश' => 'एएससी',
        'ऑर्डरबी' => 'मेनू_ऑर्डर',
        'post_type' => 'nav_menu_item',
        'पोस्ट_स्टैटस' => 'प्रकाशित',
        'आउटपुट' => ARRAY_A,
        'output_key' => 'menu_order',
        'nopaging' => सत्य,
        'update_post_term_cache' => false); 

    $ मौजूदा = wp_get_nav_menu_items ($ menu_id, $ args);
    $ पाया = गलत;
    foreach ($ मौजूदा $ मौजूद है) {
        if (strpos ($ मौजूद-> post_name, $ slug)! == FALSE) {// बहुत अच्छी खोज (सटीक नहीं)।
            $ पाया = सत्य;
            टूटना;
        }

    }
    वापसी $ मिली;
}

और डेटा फ़ाइल है:

फ़ंक्शन get_menus_data () {
    $ आइटम = सरणी ( 
        सरणी ( 
            'name' => 'मेन मेन्यू', 'स्लग' => 'मेन-मेन्यू', 'बिल्ड' => 1, 
            'आइटम' => सरणी (
                सरणी ('शीर्षक' => 'घर', 'स्लग' => '', 'बिल्ड' => 1), // स्लग खाली होना चाहिए
                सरणी ('शीर्षक' => 'ब्लॉग', 'स्लग' => 'ब्लॉग', 'बिल्ड' => 1),
                सरणी ('शीर्षक' => 'अबाउट', 'स्लग' => 'के बारे में', 'बिल्ड' => 1),
                सरणी ('शीर्षक' => 'संपर्क', 'स्लग' => 'संपर्क', 'निर्माण' => 1),
                ),
        ),
        सरणी ( 
            'नाम' => 'माध्यमिक मेनू', 'स्लग' => 'माध्यमिक-मेनू', 'निर्माण' => 0,
            'आइटम' => सरणी (
                सरणी ('शीर्षक' => 'घर', 'स्लग' => '', 'निर्माण' => 1),
                सरणी ('शीर्षक' => 'ब्लॉग', 'स्लग' => 'ब्लॉग', 'बिल्ड' => 1),
                सरणी ('शीर्षक' => 'अबाउट', 'स्लग' => 'के बारे में', 'बिल्ड' => 1),
                सरणी ('शीर्षक' => 'संपर्क', 'स्लग' => 'संपर्क', 'निर्माण' => 1),
                ),
        ),
        सरणी ( 
            'name' => 'Footer Menu', 'slug' => 'footer-menu', 'build' => 1
            'आइटम' => सरणी (
                सरणी ('शीर्षक' => 'शर्तें', 'स्लग' => 'शर्तें', 'बिल्ड' => 1),
                सरणी ('शीर्षक' => 'गोपनीयता', 'स्लग' => 'गोपनीयता', 'बिल्ड' => 1),
                सरणी ('शीर्षक' => 'संपर्क', 'स्लग' => 'संपर्क', 'निर्माण' => 1),
                ),
            ) 
    );
    $ आइटम वापस करें;
}

चयन के लिए जो पूछा जाता है, उसके लिए एक इंटरफ़ेस बनाना होगा, लेकिन यह कोड काम कर रहा है और परीक्षण किया गया है।


नमस्कार, आपके उत्तर के लिए धन्यवाद। क्या आप कृपया पोस्ट किए गए कोड को विस्तृत और स्पष्ट कर सकते हैं?
अजीज

यदि आप कोड को एक प्लगइन या थीम के फ़ंक्शन में कॉपी और पेस्ट करते हैं get_menus_data()। तो इसे फ़ंक्शन के भीतर निहित मेनू आइटम बनाना चाहिए । खोज परिणाम को गतिशील रूप से मेनू आइटम को पॉप्युलेट करने के लिए, फ़ंक्शन की आवश्यकता होती है जो कि ऐसा करने के लिए वर्डप्रेस एपीआई का उपयोग करते हैं। ये फ़ंक्शन एक पूर्ण स्व-इंस्टॉलिंग पैकेज का हिस्सा हैं जिसके द्वारा मेनू आइटम को अग्रिम में कॉन्फ़िगर किया जा सकता है, आदर्श रूप से इस तथ्य के बाद ऐसा करने की आवश्यकता को समाप्त करता है। चूंकि ये फ़ंक्शन "पर्दे के पीछे काम करते हैं" प्रदान करते हैं, इसलिए उनका उपयोग आपके द्वारा की जाने वाली खोज कार्यक्षमता के लिए एक आधार के रूप में किया जा सकता है।
cbos

1

मुझे यकीन नहीं है कि यह एक उत्तर है, लेकिन अधिक चर्चा बिंदु है।

क्या कभी किसी ने WP मेनू बनाने के लिए उन्नत कस्टम फील्ड्स पर विचार किया है? मैंने कई बार ऐसा किया है, और यह मुझे कस्टम मेनू-आइटम विशेषताओं के साथ एक कस्टम संरचना बनाने की अनुमति देता है और मेनू के लिए HTML का निर्माण एक जटिल वॉकर के बिना करता है जिसे डिफ़ॉल्ट WP मेनू के साथ की आवश्यकता होगी।

यहाँ छवि विवरण दर्ज करें

ACF

if( function_exists('acf_add_local_field_group') ):

acf_add_local_field_group(array (
    'key' => 'group_56532ec144a4b',
    'title' => 'Menu',
    'fields' => array (
        array (
            'key' => 'field_5653338918f43',
            'label' => 'Menus',
            'name' => 'menus',
            'type' => 'flexible_content',
            'instructions' => '',
            'required' => 0,
            'conditional_logic' => 0,
            'wrapper' => array (
                'width' => '',
                'class' => '',
                'id' => '',
            ),
            'button_label' => 'Add Menu',
            'min' => '',
            'max' => '',
            'layouts' => array (
                array (
                    'key' => '56533396b10bc',
                    'name' => 'menu',
                    'label' => 'Menu',
                    'display' => 'block',
                    'sub_fields' => array (
                        array (
                            'key' => 'field_56533fc6f25e7',
                            'label' => 'Menu Name',
                            'name' => 'menu__name',
                            'type' => 'text',
                            'instructions' => '',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array (
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'default_value' => '',
                            'placeholder' => '',
                            'prepend' => '',
                            'append' => '',
                            'maxlength' => '',
                            'readonly' => 0,
                            'disabled' => 0,
                        ),
                        array (
                            'key' => 'field_56532ec718f40',
                            'label' => 'Menu Items',
                            'name' => 'menu__items',
                            'type' => 'flexible_content',
                            'instructions' => '',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array (
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'button_label' => 'Add Menu Item',
                            'min' => '',
                            'max' => '',
                            'layouts' => array (
                                array (
                                    'key' => '56532eee6ef81',
                                    'name' => 'menuItem',
                                    'label' => 'Menu Item',
                                    'display' => 'block',
                                    'sub_fields' => array (
                                        array (
                                            'key' => 'field_56532f0418f41',
                                            'label' => 'Label',
                                            'name' => 'menuITem__label',
                                            'type' => 'text',
                                            'instructions' => '',
                                            'required' => 0,
                                            'conditional_logic' => 0,
                                            'wrapper' => array (
                                                'width' => 50,
                                                'class' => '',
                                                'id' => '',
                                            ),
                                            'default_value' => '',
                                            'placeholder' => '',
                                            'prepend' => '',
                                            'append' => '',
                                            'maxlength' => '',
                                            'readonly' => 0,
                                            'disabled' => 0,
                                        ),
                                        array (
                                            'key' => 'field_565333d218f45',
                                            'label' => 'Class',
                                            'name' => 'menuItem__class',
                                            'type' => 'text',
                                            'instructions' => '',
                                            'required' => 0,
                                            'conditional_logic' => 0,
                                            'wrapper' => array (
                                                'width' => 50,
                                                'class' => '',
                                                'id' => '',
                                            ),
                                            'default_value' => '',
                                            'placeholder' => '',
                                            'prepend' => '',
                                            'append' => '',
                                            'maxlength' => '',
                                            'readonly' => 0,
                                            'disabled' => 0,
                                        ),
                                        array (
                                            'key' => 'field_565342ef11b29',
                                            'label' => 'Link Type',
                                            'name' => 'menuItem__type',
                                            'type' => 'radio',
                                            'instructions' => '',
                                            'required' => 0,
                                            'conditional_logic' => 0,
                                            'wrapper' => array (
                                                'width' => 25,
                                                'class' => '',
                                                'id' => '',
                                            ),
                                            'choices' => array (
                                                'page' => 'Page',
                                                'cat' => 'Category',
                                                'url' => 'URL',
                                                'cust' => 'Custom',
                                            ),
                                            'other_choice' => 0,
                                            'save_other_choice' => 0,
                                            'default_value' => '',
                                            'layout' => 'vertical',
                                        ),
                                        array (
                                            'key' => 'field_56532f2d18f42',
                                            'label' => 'Page',
                                            'name' => 'menuItem__page',
                                            'type' => 'page_link',
                                            'instructions' => '',
                                            'required' => 0,
                                            'conditional_logic' => array (
                                                array (
                                                    array (
                                                        'field' => 'field_565342ef11b29',
                                                        'operator' => '==',
                                                        'value' => 'page',
                                                    ),
                                                ),
                                            ),
                                            'wrapper' => array (
                                                'width' => 75,
                                                'class' => '',
                                                'id' => '',
                                            ),
                                            'post_type' => array (
                                            ),
                                            'taxonomy' => array (
                                            ),
                                            'allow_null' => 0,
                                            'multiple' => 0,
                                        ),
                                        array (
                                            'key' => 'field_5653434f11b2a',
                                            'label' => 'Category',
                                            'name' => 'menuItem__cat',
                                            'type' => 'taxonomy',
                                            'instructions' => '',
                                            'required' => 0,
                                            'conditional_logic' => array (
                                                array (
                                                    array (
                                                        'field' => 'field_565342ef11b29',
                                                        'operator' => '==',
                                                        'value' => 'cat',
                                                    ),
                                                ),
                                            ),
                                            'wrapper' => array (
                                                'width' => 75,
                                                'class' => '',
                                                'id' => '',
                                            ),
                                            'taxonomy' => 'category',
                                            'field_type' => 'select',
                                            'allow_null' => 0,
                                            'add_term' => 1,
                                            'save_terms' => 0,
                                            'load_terms' => 0,
                                            'return_format' => 'id',
                                            'multiple' => 0,
                                        ),
                                        array (
                                            'key' => 'field_5653439311b2c',
                                            'label' => 'Custom',
                                            'name' => 'menuItem__cstm',
                                            'type' => 'text',
                                            'instructions' => '',
                                            'required' => 0,
                                            'conditional_logic' => array (
                                                array (
                                                    array (
                                                        'field' => 'field_565342ef11b29',
                                                        'operator' => '==',
                                                        'value' => 'cust',
                                                    ),
                                                ),
                                            ),
                                            'wrapper' => array (
                                                'width' => 75,
                                                'class' => '',
                                                'id' => '',
                                            ),
                                            'default_value' => '',
                                            'placeholder' => '',
                                            'prepend' => '',
                                            'append' => '',
                                            'maxlength' => '',
                                            'readonly' => 0,
                                            'disabled' => 0,
                                        ),
                                        array (
                                            'key' => 'field_5653437011b2b',
                                            'label' => 'URL',
                                            'name' => 'menuItem__url',
                                            'type' => 'url',
                                            'instructions' => '',
                                            'required' => 0,
                                            'conditional_logic' => array (
                                                array (
                                                    array (
                                                        'field' => 'field_565342ef11b29',
                                                        'operator' => '==',
                                                        'value' => 'url',
                                                    ),
                                                ),
                                            ),
                                            'wrapper' => array (
                                                'width' => 75,
                                                'class' => '',
                                                'id' => '',
                                            ),
                                            'default_value' => '',
                                            'placeholder' => '',
                                        ),
                                    ),
                                    'min' => '',
                                    'max' => '',
                                ),
                            ),
                        ),
                    ),
                    'min' => '',
                    'max' => '',
                ),
            ),
        ),
    ),
    'location' => array (
        array (
            array (
                'param' => 'options_page',
                'operator' => '==',
                'value' => 'acf-options-theme-options',
            ),
        ),
    ),
    'menu_order' => 0,
    'position' => 'normal',
    'style' => 'default',
    'label_placement' => 'top',
    'instruction_placement' => 'label',
    'hide_on_screen' => '',
    'active' => 1,
    'description' => '',
));

endif;

UX

function acfMenu($name) {
    if( function_exists('get_field') ) :
        $getMenus = get_field('menus', 'option');
        foreach($getMenus as $menuData) : 
            if( $menuData['menu__name'] == $name ) : 
              // Do stuff to build your menu
            endif;
        endforeach;
    endif;
}

यह सिर्फ एक त्वरित नमूना है, लेकिन ACF द्वारा प्रदान किए जाने वाले विकल्पों के साथ, आप एक मेनू आइटम पर सभी प्रकार के सामान का सामना कर सकते हैं और फिर यूआई को अपनी इच्छानुसार कोड कर सकते हैं।

आपके विशिष्ट प्रश्न के आवेदन में, कोई भी व्यक्ति सशर्त चयनों को लागू कर सकता है कि आप किस प्रकार की लिंक की आपूर्ति कर रहे हैं (संलग्न छवि देखें)। ACF कई अलग-अलग मापदंडों जैसे पेज लिंक, श्रेणी लिंक या सीधे URL की अनुमति देता है। इन मदों का एक सशर्त चयन वर्गों या अन्य विशेषताओं को मिटाए बिना मेनू आइटम के प्रकार को बदलने की अनुमति देगा।


सुझावों को देखकर अच्छा लगा - मुझे यकीन है कि एक स्क्रीनशॉट आपके विचार को बेहतर ढंग से समझने में मदद करेगा ;-)
बिरगाइरे

मुझे यकीन नहीं है कि मैं एक स्क्रीन शॉट ले पाऊंगा। नेस्टेड ACF फीचर्स में गड़बड़ हो सकती है।
टिम प्लमर

0

यह सही दृष्टिकोण को परिभाषित करने में मदद कर सकता है।

WP के पीछे डमी-डाउन दर्शन इस तरह से ड्राइव करता है कि उनके पास पहले स्थान पर सेटअप मेनू है, और सिर्फ एक कारण है कि WP एक खराब विकल्प हो सकता है क्योंकि बड़ी मात्रा में बार-बार सामग्री बदलने वाली साइट को संभालने के लिए रूपरेखा।

कंटेंट मैनेजमेंट को डमी प्रूफ के रूप में संभव बनाने की कोशिश में यह इसे विशेष प्रतिमानों में बंद कर देता है जो अक्सर किसी अच्छे कारण के लिए अक्सर अतिरिक्त काम करता है। आप मेनू टेम्प्लेट को सहेज नहीं सकते हैं, न ही मौजूदा मेनू को डुप्लिकेट कर सकते हैं, और न ही कॉन्फ़िगर के नुकसान का अनुभव किए बिना मेनू मेनू को सुरक्षित रूप से स्टोर कर सकते हैं।

मैं आपके सुझाव को पसंद करता हूं, जो उनके द्वारा प्रदान किए गए देशी मेनू प्रारूपों के लिए एक अच्छा विकल्प होगा, क्योंकि यह डमी-प्रूफ दृष्टिकोण के बीच एक अच्छा मध्य मैदान है, जबकि अभी भी बहुत अधिक लचीलेपन और तैनाती की गति प्रदान करता है। और मैं कष्टप्रद ड्रैग एंड ड्रॉप प्रक्रिया के विकल्प के रूप में एक सॉर्ट पैरामीटर जोड़ूंगा जो चारों ओर बहुत अधिक हलचल पैदा कर सकता है।

हालाँकि, जब मैं चाहूंगा कि WP में मेनू प्रबंधन को बदल दिया जाए, तो इस रास्ते को बहुत नीचे धकेलना, WP WP दर्शन के विरुद्ध है और इसका मतलब यह हो सकता है कि यह अब सबसे कम आम भाजक के लिए खानपान नहीं है, जो काफी हद तक लोकप्रियता का कारण है WP।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.