1. Чи впливає це на видимість роботи WP?
ЯКЩО це матиме реальний вплив на деякі невеликі файли, то він матиме вплив, який має вплив менший, ніж WP: PHP та продуктивність сервера. Чи справді це впливає? Не зовсім. Але ви все одно можете просто почати робити тести на продуктивність самостійно.
2. Чи краще тримати це все в 1 файлі (function.php)
Тепер питання "Що краще"? Із загального часу завантаження файлів? З точки зору організації файлів? У будь-якому випадку це не має ніякого значення. Робіть це так, щоб ви не втратили огляд і змогли підтримувати результат таким чином, який вам подобається.
3. який найкращий шлях для цього?
Те, що я зазвичай роблю, - це просто зачепитись десь ( plugins_loaded
, after_setup_theme
тощо) - залежить від того, що вам потрібно), а потім просто вимагати від них усіх:
foreach ( glob( plugin_dir_path( __FILE__ ) ) as $file )
require_once $file;
У будь-якому випадку, ви можете зробити це трохи складніше і гнучкіше. Подивіться на цей приклад:
<?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;
}
}
Це в основному те саме (потрібен PHP 5.3+). Перевага полягає в тому, що він трохи більш дрібнозернистий, тому ви можете просто завантажувати файли з папок, які вам потрібні для виконання певного завдання:
$fileLoader = new WCM\FilesLoader( 'assets/php' );
foreach ( $fileLoader as $file )
$fileLoader->loadFile( $file );
Оновлення
Оскільки ми живемо в новому світі після публікації PHP v5.2, ми можемо скористатися \FilterIterator
. Приклад найкоротшого варіанту:
$files = new \FilesystemIterator( __DIR__.'/src', \FilesystemIterator::SKIP_DOTS );
foreach ( $files as $file )
{
/** @noinspection PhpIncludeInspection */
! $files->isDir() and include $files->getRealPath();
}
Якщо вам доведеться дотримуватися PHP v5.2, то ви все одно можете перейти з \DirectoryIterator
майже і тим же кодом.