देर से जवाब
अपनी फ़ाइलों को सही तरीके से कैसे शामिल करें:
function wpse1403_bootstrap()
{
// Here we load from our includes directory
// This considers parent and child themes as well
locate_template( array( 'inc/foo.class.php' ), true, true );
}
add_action( 'after_setup_theme', 'wpse1403_bootstrap' );
प्लगइन्स में भी यही काम करता है।
सही रास्ता या यूआरआई कैसे प्राप्त करें
फ़ाइल सिस्टम API फ़ंक्शन पर भी नज़र डालें:
home_url()
plugin_dir_url()
plugin_dir_path()
admin_url()
get_template_directory()
get_template_directory_uri()
get_stylesheet_directory()
get_stylesheet_directory_uri()
- आदि।
की संख्या कैसे कम करें include/require
यदि आपको किसी निर्देशिका से जाने वाली सभी फ़ाइलों को लाने की आवश्यकता है
foreach ( glob( 'path/to/folder/*.php' ) as $file )
include $file;
ध्यान रखें कि यह विफलताओं (उत्पादन के उपयोग के लिए अच्छा है) को अनदेखा करता है / लोड करने योग्य फ़ाइलों को नहीं।
इस व्यवहार को बदलने के लिए आप विकास के दौरान एक अलग विन्यास का उपयोग कर सकते हैं:
$files = ( defined( 'WP_DEBUG' ) AND WP_DEBUG )
? glob( 'path/to/folder/*.php', GLOB_ERR )
: glob( 'path/to/folder/*.php' )
foreach ( $files as $file )
include $file;
संपादित करें: OOP / SPL दृष्टिकोण
जैसा कि मैंने अभी वापस आकर देखा कि यह उत्तर अधिक से अधिक उठ रहा है, मैंने सोचा कि मैं दिखा सकता हूं कि मैं आजकल कैसे कर रहा हूं - एक PHP 5.3+ दुनिया में। निम्न उदाहरण सभी फाइलों को लोड करता है जिसका नाम सबफ़ोल्डर है src/
। यह वह जगह है जहां मेरे पास मेरी लाइब्रेरी है जो कुछ कार्यों जैसे मेनू, चित्र आदि को संभालती है। आपको नाम की परवाह करने की भी जरूरत नहीं है क्योंकि हर एक फाइल लोड की गई है। यदि आपके पास इस निर्देशिका में अन्य सबफ़ोल्डर हैं, तो उन्हें अनदेखा कर दिया जाता है।
\FilesystemIterator
PHP 5.3+ है supercedor से अधिक \DirectoryIterator
। दोनों ही PHP SPL का हिस्सा हैं। जबकि PHP 5.2 ने बिल्ट इन एसपीएल एक्सटेंशन को बंद करना संभव बना दिया था (सभी इंस्टाल में 1% से कम), एसपीएल अब PHP कोर का हिस्सा है।
<?php
namespace Theme;
$files = new \FilesystemIterator( __DIR__.'/src', \FilesystemIterator::SKIP_DOTS );
foreach ( $files as $file )
{
/** @noinspection PhpIncludeInspection */
! $files->isDir() and include $files->getRealPath();
}
एक: पहले, जबकि मैं अभी भी पीएचपी 5.2.x का समर्थन किया, मैं निम्नलिखित समाधान का इस्तेमाल किया \FilterIterator
में src/Filters
निर्देशिका केवल फ़ाइलें (और फ़ोल्डरों का संकेत डॉट नहीं) को पुनः प्राप्त करने और एक \DirectoryIterator
पाशन और लोड हो रहा है क्या करना है।
namespace Theme;
use Theme\Filters\IncludesFilter;
$files = new IncludesFilter( new \DirectoryIterator( __DIR__.'/src' ) );
foreach ( $files as $file )
{
include_once $files->current()->getRealPath();
}
यह \FilterIterator
जितना आसान था:
<?php
namespace Theme\Filters;
class IncludesFilter extends \FilterIterator
{
public function accept()
{
return
! $this->current()->isDot()
and $this->current()->isFile()
and $this->current()->isReadable();
}
}
PHP 5.2 के अलावा अब तक (और 5.3 के रूप में) मृत / EOL होने के बावजूद, यह तथ्य है कि यह अधिक कोड और गेम में एक और फ़ाइल है, इसलिए बाद में जाने और PHP 5.2.x का समर्थन करने का कोई कारण नहीं है।
सारांश पेश करना
WPKrauts पर और भी अधिक गहराई से लेख यहां पाया जा सकता है ।
संपादित करें स्पष्ट रूप से सही तरीका namespace
डी कोड का उपयोग करना है , जो कि पहले से ही नाम स्थान के माध्यम से परिभाषित उचित निर्देशिका में सब कुछ डालकर PSR-4 ऑटोलॉडिंग के लिए तैयार है । फिर बस संगीतकार का उपयोग करें और composer.json
अपनी निर्भरता को प्रबंधित करने के लिए और इसे अपने PHP ऑटोलैडर (ऑटो कॉलिंग द्वारा स्वचालित रूप से आयात करता है use \<namespace>\ClassName
) को ऑटो-बिल्ड करने दें । यह PHP दुनिया में डी-फैक्टो मानक है, जो कि जाने के लिए सबसे आसान तरीका है और यहां तक कि पहले से स्वचालित और WP स्टार्टर द्वारा सरलीकृत है ।