1. Apakah ini berpengaruh pada kinerja WP dengan cara yang terlihat?
JIKA itu akan berdampak nyata untuk beberapa file kecil, maka itu akan memiliki dampak yang memiliki dampak lebih rendah dari WP: PHP dan kinerja server. Apakah itu benar-benar berpengaruh? Tidak juga. Tetapi Anda masih bisa mulai melakukan tes kinerja sendiri.
2. Apakah lebih baik menyimpannya dalam 1 file (functions.php)
Sekarang pertanyaannya adalah "Apa yang lebih baik"? Dari keseluruhan waktu pemuatan file? Dari sudut pandang organisasi file? Bagaimanapun, itu tidak ada bedanya. Lakukan dengan cara sehingga Anda tidak kehilangan gambaran umum dan dapat mempertahankan hasilnya dengan cara yang menyenangkan bagi Anda.
3. apa cara terbaik untuk melakukan ini?
Apa yang biasanya saya lakukan hanya mengaitkan suatu tempat di ( plugins_loaded
, after_setup_theme
, dll - tergantung pada apa yang Anda perlu) dan kemudian hanya meminta mereka semua:
foreach ( glob( plugin_dir_path( __FILE__ ) ) as $file )
require_once $file;
Bagaimanapun, Anda dapat membuatnya sedikit lebih rumit dan fleksibel juga. Lihatlah contoh itu:
<?php
namespace WCM;
defined( 'ABSPATH' ) OR exit;
class FilesLoader implements \IteratorAggregate
{
private $path = '';
private $files = array();
public function __construct( $path )
{
$this->setPath( $path );
$this->setFiles();
}
public function setPath( $path )
{
if ( empty( $this->path ) )
$this->path = \plugin_dir_path( __FILE__ ).$path;
}
public function setFiles()
{
return $this->files = glob( "{$this->getPath()}/*.php" );
}
public function getPath()
{
return $this->path;
}
public function getFiles()
{
return $this->files;
}
public function getIterator()
{
$iterator = new \ArrayIterator( $this->getFiles() );
return $iterator;
}
public function loadFile( $file )
{
include_once $file;
}
}
Ini adalah kelas yang pada dasarnya sama (membutuhkan PHP 5.3+). Keuntungannya adalah butirannya sedikit lebih halus, sehingga Anda dapat dengan mudah memuat file dari folder yang Anda perlukan untuk melakukan tugas tertentu:
$fileLoader = new WCM\FilesLoader( 'assets/php' );
foreach ( $fileLoader as $file )
$fileLoader->loadFile( $file );
Memperbarui
Karena kita hidup di dunia baru, memposting PHP v5.2 dunia, kita dapat memanfaatkan \FilterIterator
. Contoh varian terpendek:
$files = new \FilesystemIterator( __DIR__.'/src', \FilesystemIterator::SKIP_DOTS );
foreach ( $files as $file )
{
/** @noinspection PhpIncludeInspection */
! $files->isDir() and include $files->getRealPath();
}
Jika Anda harus tetap menggunakan PHP v5.2, maka Anda masih bisa menggunakan \DirectoryIterator
dan kode yang hampir sama.
loadFile()
ataurequire_once
. Jadi sederhananya menawarkan sesuatu seperti dukungan tema di mana pengguna sendiri dapat menggunakanadd_theme_support()/remove_*()
untuk hanya mengambil modul yang dia inginkan. Maka cukup gunakan hasilnya untuk$loadFile()
atauglob()
. Btw, jika ini solusi Anda, harap tandai sebagai itu. Terima kasih.Saya mengerjakan ulang @kaiser sedikit menjawab kebutuhan saya - pikir saya membagikannya. Saya ingin lebih banyak opsi, itu dijelaskan di dalam kode dan pada contoh penggunaan di bawah ini.
Kode:
Contoh penggunaan:
sumber