Get_home_path () और ABSPATH के बीच क्या अंतर है?


27

बीच क्या अंतर है get_home_path()और ABSPATH? वर्डप्रेस स्थापित रूट को इंगित करने के लिए दोनों की बात नहीं है?

जवाबों:


33

उन्हें एक ही काम करना चाहिए , लेकिन कुछ शर्तों के तहत, ऐसा नहीं हो सकता।

सबसे पहले ध्यान दें:

  • कि कोडेक्स प्रविष्टि वर्णन भ्रामक है
  • कि wp-admin/includes/file.phpसंदर्भ बाकी बुला में शामिल किया जाना चाहिए get_home_path()एक अपरिभाषित समारोह बुला कर दिया जाएगा।

कोडेक्स प्रविष्टि के बारे में,

विवरण

वर्डप्रेस इंस्टॉलेशन की जड़ में पूर्ण फाइलसिस्टम पथ प्राप्त करें।

प्रतिलाभ की मात्रा

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

उदाहरण

$path = get_home_path();
print "Path: ".$path; // Return "Path: /var/www/htdocs/" or "Path: /var/www/htdocs/wordpress/" if it is subfolder

यह बताता है कि यदि आपने वर्डप्रेस को एक उप-निर्देशिका में स्थापित किया है तो रिटर्न वैल्यू सबफ़ोल्डर का पथ लौटाएगा। यह वास्तव में गलत है।

get_home_path()भले ही यह एक उप-निर्देशिका में स्थापित हो, अपने वर्डप्रेस इंस्टॉलेशन की रूट डायरेक्टरी वापस कर देगा। यही कार्य का उद्देश्य है।

मान लें कि आपका वर्डप्रेस इंस्टॉलेशन एक उप-निर्देशिका के भीतर है /dev, जिसे कहा जाता है ,

यदि आप एक कॉल लॉग इन करते हैं ABSPATH, तो उसका परिणाम होगा, /var/www/htdocs/devजो कि आपके इंस्टॉलेशन का मूल नहीं है। आपकी स्थापना का मूल है /var/www/htdocs

ABSPATHपहले परिभाषित किया गया है wp-load.phpजिसमें यह स्थित होगा /var/www/htdocs/dev/wp-load.phpइसलिए यह वह जगह है जहां ABSPATHसे इसकी परिभाषा ली जाएगी।

यदि आप get_home_path()आगे का निरीक्षण करते हैं तो आप ध्यान देंगे कि यदि site_urlऔर home_urlअलग-अलग हैं, तो एक उप-स्ट्रिंग स्ट्रिंग के भीतर पाए गए उप-निर्देशिका की स्थिति (पहले भोग) द्वारा शासित पथ से ली गई है।

function get_home_path() {
    $home    = set_url_scheme( get_option( 'home' ), 'http' );
    $siteurl = set_url_scheme( get_option( 'siteurl' ), 'http' );

    if ( ! empty( $home ) && 0 !== strcasecmp( $home, $siteurl ) ) {
        $wp_path_rel_to_home = str_ireplace( $home, '', $siteurl ); /* $siteurl - $home */
        $pos = strripos( str_replace( '\\', '/', $_SERVER['SCRIPT_FILENAME'] ), trailingslashit( $wp_path_rel_to_home ) );
        $home_path = substr( $_SERVER['SCRIPT_FILENAME'], 0, $pos );
        $home_path = trailingslashit( $home_path );
    } else {
        $home_path = ABSPATH;
    }

    return str_replace( '\\', '/', $home_path );
}

इसलिए, इसके परिणामस्वरूप, get_home_path()और ABSPATHयदि आपने वर्डप्रेस को उप-निर्देशिका में स्थापित किया है, तो विभिन्न परिणाम वापस आ सकते हैं।

दूसरे, कॉलिंग get_home_path()को एक संदर्भ में किया जाना चाहिए , जहां wp-admin/includes/file.phpपहले से ही शामिल किया गया है।

एक उदाहरण के रूप get_home_path()में admin_initहुक के भीतर का उपयोग ठीक है, जहां इसका उपयोग करना initनहीं है।

इस फाइल को देखने पर केवल एडमिन (डैशबोर्ड) के संदर्भ में ही शामिल किया जाता है, अगर आपको इस संदर्भ के बाहर इसकी आवश्यकता है, तो फ़ंक्शन को कॉल करने से पहले आपको फ़ाइल को स्वयं शामिल करना होगा,

require_once(ABSPATH . 'wp-admin/includes/file.php');

विडंबना (या नहीं) जो उपयोग करता है ABSPATH: डी


अच्छी तरह से समझाया, हालांकि मुझे लगता है कि तीसरे पक्ष के डेवलपर्स को न तो निरंतर और न ही फ़ंक्शन का उपयोग करना चाहिए। क्योंकि वर्डप्रेस कहीं भी स्थित हो सकता है , दस्तावेज़ मूल कारणों के बाहर रखकर दोनों स्थिर और समारोह जैसे वापस जाने के लिए /var/apps/wordpressकी बजाय /var/www/htdocs। उपयोग करने के बजाय $_SERVER['DOCUMENT_ROOT'], कम से कम यदि आप आश्वस्त कर सकते हैं कि दस्तावेज़ रूट नहीं बदलेगा।
फ्लेव

@Fleuv वास्तव में यह एक मुश्किल है ... यहां तक $_SERVER['DOCUMENT_ROOT']कि इसके मुद्दे भी हैं ... उदाहरण के लिए सेट या सही ढंग से सेट नहीं किया जाना चाहिए और इसी तरह। वहाँ अन्य तरीके मैं भी इसे संभालने के लिए सोच सकते हैं ... प्रत्येक अपने स्वयं के caveats के साथ। बहुत मज़ा :)
एडम

1
इस समाधान को अच्छी तरह से समझाया गया था और WP द्वारा "परिभाषित नहीं" त्रुटि फेंकने के बाद वांछित रूप से काम किया गया था। धन्यवाद;)
क्रिस स्प्रैग

-1

मैं WP के "होम" पेज से लिंक करने के लिए home_url () का उपयोग कर रहा हूं । कभी कभी, SITE_URL () वास्तव में अपने नहीं हो सकता है HOME_URL () । आप Wordpress में एक मुख पृष्ठ के रूप में परिभाषित कर सकते हैं।

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