बीच क्या अंतर है get_home_path()और ABSPATH? वर्डप्रेस स्थापित रूट को इंगित करने के लिए दोनों की बात नहीं है?
बीच क्या अंतर है get_home_path()और ABSPATH? वर्डप्रेस स्थापित रूट को इंगित करने के लिए दोनों की बात नहीं है?
जवाबों:
उन्हें एक ही काम करना चाहिए , लेकिन कुछ शर्तों के तहत, ऐसा नहीं हो सकता।
सबसे पहले ध्यान दें:
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, जिसे कहा जाता है ,
site_url) (जैसे / var / www / htdocs / dev)home_url)यदि आप एक कॉल लॉग इन करते हैं 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: डी
$_SERVER['DOCUMENT_ROOT']कि इसके मुद्दे भी हैं ... उदाहरण के लिए सेट या सही ढंग से सेट नहीं किया जाना चाहिए और इसी तरह। वहाँ अन्य तरीके मैं भी इसे संभालने के लिए सोच सकते हैं ... प्रत्येक अपने स्वयं के caveats के साथ। बहुत मज़ा :)
/var/apps/wordpressकी बजाय/var/www/htdocs। उपयोग करने के बजाय$_SERVER['DOCUMENT_ROOT'], कम से कम यदि आप आश्वस्त कर सकते हैं कि दस्तावेज़ रूट नहीं बदलेगा।