Geç cevap
Dosyalarınızı doğru şekilde nasıl dahil edersiniz:
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' );
Aynı eklentileri de çalışır.
Doğru yol veya URi nasıl alınır
Ayrıca aşağıdaki gibi dosya sistemi API işlevlerine de göz atın:
home_url()
plugin_dir_url()
plugin_dir_path()
admin_url()
get_template_directory()
get_template_directory_uri()
get_stylesheet_directory()
get_stylesheet_directory_uri()
- vb.
Sayısını azaltmak nasıl include/require
Bir dizindeki tüm dosyaları almanız gerekiyorsa ,
foreach ( glob( 'path/to/folder/*.php' ) as $file )
include $file;
Bunun başarısızlıkları görmezden geldiğini (üretim kullanımı için iyi olabilir) / yüklenemez dosyaları göz önünde bulundurun.
Bu davranışı değiştirmek için geliştirme sırasında farklı bir config kullanmak isteyebilirsiniz:
$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;
Düzenleme: OOP / SPL yaklaşımı
Yeni döndüm ve bu cevabın gittikçe daha fazla puan aldığını gördüm, bugünlerde nasıl yaptığımı gösterebileceğimi düşündüm - bir PHP 5.3+ dünyasında. Aşağıdaki örnek, tüm dosyaları adlı bir tema alt klasöründen yükler src/
. Burası, menüler, görüntüler vb. Gibi belirli görevleri yerine getiren kütüphanelerim var. Her bir dosya yüklenirken adı bile umursamalısınız. Bu dizinde başka alt klasörleriniz varsa, dikkate alınmazlar.
\FilesystemIterator
PHP 5.3+ olan supercedor üzerinde \DirectoryIterator
. Her ikisi de PHP SPL'nin bir parçasıdır. PHP 5.2, yerleşik SPL uzantısını kapatmayı mümkün kılarken (tüm kurulumların% 1'inden azı bunu yaptı), SPL artık PHP çekirdeğinin bir parçası.
<?php
namespace Theme;
$files = new \FilesystemIterator( __DIR__.'/src', \FilesystemIterator::SKIP_DOTS );
foreach ( $files as $file )
{
/** @noinspection PhpIncludeInspection */
! $files->isDir() and include $files->getRealPath();
}
A: Hala PHP 5.2.x desteklenen Daha önce ise, şu çözümü kullanılan \FilterIterator
içinde src/Filters
yalnızca dosyaları (ve klasörlerin işaretçileri dot değil) almak için dizin ve bir \DirectoryIterator
loop ve yükleme yapmak.
namespace Theme;
use Theme\Filters\IncludesFilter;
$files = new IncludesFilter( new \DirectoryIterator( __DIR__.'/src' ) );
foreach ( $files as $file )
{
include_once $files->current()->getRealPath();
}
Bu \FilterIterator
kadar kolaydı:
<?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'nin şu anda ölü / EOL olmasının yanı sıra (ve ayrıca 5.3), oyunda daha fazla kod ve bir dosya daha olması, bu nedenle daha sonra gidip PHP 5.2.x'i desteklemenin bir nedeni yok.
Özetlenmiş
WPKrauts'da daha ayrıntılı bir makale bulunabilir .
EDIT Açıkça doğru bir yol, PSR-4 otomatik yüklemesi namespace
için hazırlanan her şeyi ad alanıyla tanımlanmış uygun dizine koyarak d kodunu kullanmaktır . Sonra sadece kullanmak Besteci ve bağımlılıkları yönetmek ve PHP autoloader otomatik yapalım (yani otomatik ithalatı sadece arayarak bir dosya ). Bu, PHP dünyasındaki fiili standart, gitmenin en kolay yolu ve WP Starter tarafından önceden otomatikleştirilmiş ve sadeleştirilmiş .composer.json
use \<namespace>\ClassName