ब्लॉग URL के सापेक्ष URL वाले मेनू में कस्टम लिंक कैसे जोड़ें


16

मेरे काम का हिस्सा Wordpress वेबसाइट बनाना है। मैं आमतौर पर अपने लैपटॉप पर काम करता हूं जब तक कि मेरे पास टेस्ट सर्वर पर अपलोड होने के लिए कुछ अच्छा न हो, जहां क्लाइंट इसकी समीक्षा करता है।

मैं हर नए प्रोजेक्ट के लिए एक VirtualHost बनाता हूं, इसलिए मैं हमेशा एक डोमेन में एक Wordpress इंस्टॉलेशन के साथ काम करता हूं जो दिखता है http://local.example.com/, लेकिन जब साइट को टेस्ट सर्वर पर अपलोड किया जाता है (मेरे द्वारा नियंत्रित नहीं किया जाता है), तो डोमेन कुछ ऐसा हो सकता है http://testserver.com/arbitrary/path/example/

समस्या यह है कि अगर मैं एक मेनू में एक कस्टम लिंक जोड़ता हूं, जो उदाहरण के लिए इंगित करता है, तो /events/यह स्थानीय रूप से लिंक बनाने के लिए ठीक काम करेगा http://local.example.com/events/, लेकिन परीक्षण सर्वर में, लिंक इंगित करेगा http://testserver/events/, जो स्पष्ट रूप से सही नहीं है।
मैं जो चाहता हूं वह कस्टम लिंक को एक URL देना है जो मेरे स्थानीय परिवेश और परीक्षण सर्वर दोनों पर काम करेगा।

मैं पहले से ही बदलने की समस्या को संभालने homeऔर siteurlद्वारा Wordpress विकल्प:

  • स्थानीय डेटाबेस पर उन सेटिंग्स को बदलना
  • डेटाबेस का एक डंप बनाना
  • सर्वर पर डेटाबेस को अपडेट करें
  • स्थानीय विकल्पों को बहाल करना।

मैं कस्टम लिंक के लिए पूर्ण URL का उपयोग नहीं करना चाहता हूं और हर बार जब मुझे सर्वर के डेटाबेस को अपडेट करने की आवश्यकता होती है, तो मुझे सर्वर URL से प्रतिस्थापित करना होगा।

पोस्ट सामग्री के अंदर लिंक के लिए, एक प्लगइन है जो दो शॉर्टकोड को जोड़ने में समस्या को हल करता है: http://wordpress.org/extend/plugins/url-shortcodes/ , लेकिन मैं कस्टम लिंक के लिए कुछ समान नहीं खोज पाया हूं ।


5
विलिंगटन, मैं आपको एक url में मदद नहीं कर सकता जो कहीं भी काम करता है। मैं जो कर सकता हूं वह आपको spectacu.la/search-and-replace-for-wordpress-dat डेटाबेस पर इंगित करता है । मैं डेविड की खोज का उपयोग कर रहा हूं और काफी समय से प्रतिस्थापित कर रहा हूं और मैं क्रमबद्ध डेटा में भी उदाहरण के लिए यूआरएल को बदलने के लिए अच्छा काम करता हूं। तो यह है कि मैं इसे कैसे करता हूं: बस हार्डकोड लिंक और डेटाबेस को किसी अन्य डोमेन पर ले जाने के बाद परिवर्तित करें। सौभाग्य, पीटर
पीटर

अब तक एक ही रास्ता है कि मैं सफलतापूर्वक एक देव वातावरण से एक जीवित वातावरण में जाने के लिए पाया गया है, एसक्यूएल डंप करने के बाद एक खोज करने के लिए और पूरी फाइल पर प्रतिस्थापित किया जाता है, न कि केवल घर और साइटर्ल विकल्पों को बदलना। मेरे पास ऐसी फाइलें हैं जहां 1000 से अधिक बार URL मौजूद था। (अभी भी पता नहीं है कि यह उस उच्च :) को पाने में कैसे कामयाब रहा)
रोब विलियम्स

@Peter, @Rob आप लोगों को जवाब देने के लिए धन्यवाद देता हूं, मुझे डर था कि खोज-और-प्रतिस्थापन एकमात्र समाधान था, लेकिन पहले पूछना चाहता था। मैं उस स्क्रिप्ट पर एक नज़र डालूंगा।
विलिंगटन वेगा

सबसे अच्छा यह है कि मैं जो सुझाव देता हूं, उसकी तरह एक स्क्रिप्ट का उपयोग करें। ध्यान दें कि एक db डंप में टेक्स्ट सर्च और रिप्लेस होने से क्रमबद्ध डेटा (विशेष रूप से wp_options में पाया जाता है) खराब हो जाएगा, यदि और जब स्ट्रींग और रिप्लेसमेंट स्ट्रिंग्स की लंबाई समान नहीं होती है, क्योंकि उस डेटा को db में एक लम्बे विनिर्देश के साथ संग्रहित किया जाता है । सफलता, पीटर
पीटर

जवाबों:


9

मैं इसके लिए एक समाधान भी तलाश रहा था और मुझे यह सरल लगा।

यह वही है जो आपको URL फ़ील्ड में रखने की आवश्यकता है:

/index.php/internal-site-name

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

यह ठीक काम करता है!

सादर क्रिस


1
यह काम करता है लेकिन यह index.php को शामिल करने के लिए url को भी बदलता है। # लिंक के साथ एक पृष्ठ के आवेदन के मामले में, यह पहले पृष्ठ को ताज़ा करेगा और फिर आपको गंतव्य तक ले जाएगा (केवल पहली बार)। फिर भी, एक अच्छा विचार
कैटलिन डेकोन्स्कु

मैंने index.php भाग के बिना / कुछ का उपयोग किया और काम करने लगता है
user3808307

4

nav_menu_link_attributesआउटपुट होने से पहले आप प्रत्येक मेनू आइटम के लिए href विशेषता को निरीक्षण और संशोधित करने के लिए फ़िल्टर का उपयोग कर सकते हैं ।

इस उदाहरण में, हम किसी भी href विशेषताओं की तलाश करते हैं, जो उस स्थिति में शुरू होती हैं /, और उस स्थिति में परीक्षण साइट URL को प्रस्तुत करती हैं:

function wpd_nav_menu_link_atts( $atts, $item, $args, $depth ){
    if( '/' == substr( $atts['href'], 0, 1 ) ){
        $atts['href'] = 'http://testserver.com/example' . $atts['href'];
    }
    return $atts;
}
add_filter( 'nav_menu_link_attributes', 'wpd_nav_menu_link_atts', 20, 4 );

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


यही सबसे अच्छा तरीका है! लेकिन कृपया @Milo, इस स्मार्ट वर्डप्रेस बेस url के साथ तीसरी लाइन को बदल दें (get site_url of wordpress): $ atts ['href'] = site_url ()। $ Atts [ 'href'];
gtamborero

2

<base href=" ">हेड मेटा में टैग का उपयोग करने से पेज में सभी रिश्तेदार एंकरों को बेस यूआरएल मिलेगा।

संदर्भ:
https://www.w3.org/TR/html4/struct/links.html
12.4 पथ जानकारी: आधार तत्व

वर्डप्रेस में सापेक्ष कस्टम लिंक:
आप साइट यूआरएल सभी एंकर के आधार यूआरएल होना चाहते हैं पर जोड़ने के विषय / header.php भीतर <head>:

<base href="<?php echo site_url(); ?>/">

मुझे पता है कि आपके लिए देर हो सकती है लेकिन किसी और की मदद कर सकते हैं।


उम्मीद तो दिखती है। मैं इसका परीक्षण करूंगा और वापस रिपोर्ट करूंगा।
एरिक हेपरले - कोडस्लाइयर २०१०

ehepperle.com/sites/in-progress/some-wp-site-root/जब तक आप स्पष्ट रूप से साइट रूट सेट नहीं करते हैं, जैसे पथ के साथ काम नहीं करते हैं । baseटैग के उपयोग से वेब विकास की गति में सुधार नहीं होता है , क्योंकि जब आप किसी अन्य साइट पर जाते हैं, तो आपको फिर से परिभाषित करना होगा कि आधार क्या है। हालाँकि, मैं href मानों की लंबाई कम करने में मूल्य देख सकता हूँ।
एरिक हेपरले - कोडस्लेयर2010

आइडिया अच्छा है लेकिन ऐसा लगता है कि वर्डप्रेस ने कस्टम पथ का उपयोग करते समय wp कस्टम मेन्यू पर उदाहरण के लिए बेस पथ की उपेक्षा की (उदाहरण के लिए: / संपर्क)
gtamborero

1

मेनू सेटअप में एक कस्टम URL पर [blogurl] के सापेक्ष लिंक का उपयोग करना संभव है। गुप्त एकल के साथ सापेक्ष URL शुरू करना है /। जब कोई एकल / कस्टम URL शुरू करता है, तो सिस्टम विशिष्ट को नहीं http://छोड़ेगा और तब निष्पादन समय में लक्ष्य URL में वर्तमान ब्लॉगURL उत्पन्न हो जाएगा।

उदाहरण
यदि आप अपने होम पेज पर जाना चाहते हैं, तो बस /कस्टम URL के रूप में डालें

यदि आप फ़ोल्डर में इंडेक्स पेज पर जाना चाहते हैं bbforumsतो /bbforumsकस्टम URL के रूप में डालें।

यह आपको मेनू के सभी कस्टम लिंक में नए ब्लॉगुरल को कठिन कोड के बिना एक साइट को एक परीक्षण डोमेन में ले जाने की अनुमति देता है।

उदाहरण के लिए:
यदि मेरा ब्लॉग है http://example.comऔर मैं इसे एक उपडोमेन में परीक्षण करना चाहता हूं http://test.example.com, तो साइट को ऊपर बताए गए रिश्तेदार URL सम्मेलन का उपयोग करके मेनू समस्याओं के बिना परीक्षण और उत्पादन के बीच ले जाया जा सकता है। मैंने साइट को स्थानांतरित करने के लिए XCloner प्लगइन का उपयोग करके इस दृष्टिकोण का सफलतापूर्वक परीक्षण किया है।


6
इस ब्लॉग यूआरएल स्लैश है, उदाहरण के लिए के लिए काम नहीं करता है example.com/blog । मेनू आइटम के बाद '/' आपको example.com पर ले जाएगा ।
जिम्पांजी

1

सबसे पहले आपको URL शॉर्टकोड के लिए इस प्लगइन को स्थापित करना होगा

इस कोड को functions.phpअपनी थीम में अपनी फ़ाइल में जोड़ें :

class description_walker extends Walker_Nav_Menu {
    function start_el( &$output, $item, $depth, $args ) {
        global $wp_query;
        $indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';

        $class_names = $value = '';

        $classes = empty( $item->classes ) ? array() : (array) $item->classes;

        $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) );
        $class_names = ' class="'. esc_attr( $class_names ) . '"';

        $output .= $indent . '<li id="menu-item-'. $item->ID . '"' . $value . $class_names .'>';

        $attributes  = ! empty( $item->attr_title ) ? ' title="'  . esc_attr( $item->attr_title ) . '"' : '';
        $attributes .= ! empty( $item->target )     ? ' target="' . esc_attr( $item->target     ) . '"' : '';
        $attributes .= ! empty( $item->xfn )        ? ' rel="'    . esc_attr( $item->xfn        ) . '"' : '';

        // echo $item->url;
        $string = explode( '::', $item->url, 3 );
        if ( $string[1] ) {
            $string[1] = str_replace( '-', ' ', $string[1] );
            $item->url = do_shortcode( "[$string[1]]" ); 
        }

        $attributes .= ! empty( $item->url )        ? ' href="'   . esc_attr( $item->url        ) .'"' : '';

        $prepend = '<strong>';
        $append = '</strong>';
        $description  = ! empty( $item->description ) ? '<span>' . esc_attr( $item->description ) . '</span>' : '';

        if ( $depth != 0 ) {
            $description = $append = $prepend = "";
        }

        $item_output  = $args->before;
        $item_output .= '<a'. $attributes . '>';
        $item_output .= $args->link_before . $prepend . apply_filters( 'the_title', $item->title, $item->ID ) . $append;
        $item_output .= $description . $args->link_after;
        $item_output .= '</a>';
        $item_output .= $args->after;

        $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
    } 
}

फिर आपको wp_nav_menuटेम्प्लेट फ़ाइलों से फ़ंक्शन को कॉल करना होगा :

$arg = array( 
    'menu'        => "main-menu", 
    'echo'        => true, 
    'fallback_cb' => 'wp_page_menu', 
    'depth'       => 0, 
    'walker'      => new description_walker() 
); 
wp_nav_menu( $arg );

बस। इसके बाद बैक-एंड मेनू सेक्शन में जाएं।

उदाहरण के लिए, यदि मैं पृष्ठ URL को एक कस्टम लिंक देना चाहता हूं, तो मैं इसे इस तरह जोड़ूंगा:

http://::blogurl-id='1302'::

अब आप फ्रंट-एंड पर जा सकते हैं और जांच सकते हैं कि शोर्ट काम करता है।

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