Jawaban terlambat
Cara memasukkan file Anda dengan cara yang benar:
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' );
Hal yang sama juga berfungsi pada plugin.
Cara mendapatkan jalur yang benar atau URi
Lihat juga fungsi sistem file API seperti:
home_url()
plugin_dir_url()
plugin_dir_path()
admin_url()
get_template_directory()
get_template_directory_uri()
get_stylesheet_directory()
get_stylesheet_directory_uri()
- dll.
Cara mengurangi jumlah include/require
Jika Anda perlu mengambil semua file dari direktori, ikuti
foreach ( glob( 'path/to/folder/*.php' ) as $file )
include $file;
Perlu diingat bahwa ini mengabaikan kegagalan (mungkin baik untuk penggunaan produksi) / tidak dapat memuat file.
Untuk mengubah perilaku ini, Anda mungkin ingin menggunakan konfigurasi yang berbeda selama pengembangan:
$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;
Edit: pendekatan OOP / SPL
Ketika saya baru saja kembali dan melihat bahwa jawaban ini semakin meningkat, saya pikir saya mungkin menunjukkan bagaimana saya melakukannya sekarang - di dunia PHP 5.3+. Contoh berikut memuat semua file dari subfolder tema yang bernama src/
. Di sinilah saya memiliki perpustakaan saya yang menangani tugas-tugas tertentu seperti menu, gambar, dll. Anda bahkan tidak perlu peduli dengan nama karena setiap file tunggal dimuat. Jika Anda memiliki subfolder lain di direktori ini, mereka diabaikan.
The \FilesystemIterator
adalah PHP 5.3+ supercedor atas \DirectoryIterator
. Keduanya adalah bagian dari PHP SPL. Sementara PHP 5.2 memungkinkan untuk menonaktifkan ekstensi SPL bawaan (di bawah 1% dari semua pemasangan yang melakukannya), SPL sekarang adalah bagian dari inti PHP.
<?php
namespace Theme;
$files = new \FilesystemIterator( __DIR__.'/src', \FilesystemIterator::SKIP_DOTS );
foreach ( $files as $file )
{
/** @noinspection PhpIncludeInspection */
! $files->isDir() and include $files->getRealPath();
}
Sebelumnya ketika saya masih mendukung PHP 5.2.x, saya menggunakan solusi berikut: A \FilterIterator
dalam src/Filters
direktori hanya mengambil file (dan bukan dot pointer folder) dan \DirectoryIterator
untuk melakukan perulangan dan memuat.
namespace Theme;
use Theme\Filters\IncludesFilter;
$files = new IncludesFilter( new \DirectoryIterator( __DIR__.'/src' ) );
foreach ( $files as $file )
{
include_once $files->current()->getRealPath();
}
The \FilterIterator
semudah itu:
<?php
namespace Theme\Filters;
class IncludesFilter extends \FilterIterator
{
public function accept()
{
return
! $this->current()->isDot()
and $this->current()->isFile()
and $this->current()->isReadable();
}
}
Selain PHP 5.2 sudah mati / EOL sekarang (dan 5.3 juga), ada fakta bahwa itu lebih banyak kode dan satu file lagi dalam permainan, jadi tidak ada alasan untuk menggunakannya nanti dan mendukung PHP 5.2.x.
Jumlahkan
Artikel yang lebih mendalam dapat ditemukan di sini di WPKrauts .
EDIT Cara yang jelas benar adalah dengan menggunakan namespace
kode d, disiapkan untuk autoloading PSR-4 dengan meletakkan segala sesuatu di direktori yang sesuai yang sudah ditentukan melalui namespace. Kemudian gunakan saja Komposer dan a composer.json
untuk mengelola dependensi Anda dan biarkan ia membuat autoloader PHP Anda secara otomatis (yang mengimpor file secara otomatis hanya dengan menelepon use \<namespace>\ClassName
). Itulah standar de-facto di dunia PHP, cara termudah untuk pergi dan bahkan lebih otomatis dan disederhanakan oleh WP Starter .