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.
\FilesystemIteratorPHP 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 \FilterIteratoriçinde src/Filtersyalnızca dosyaları (ve klasörlerin işaretçileri dot değil) almak için dizin ve bir \DirectoryIteratorloop 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 \FilterIteratorkadar 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 namespaceiç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.jsonuse \<namespace>\ClassName