Из того, что я понимаю, при разработке темы, functions.php
получает включен в каждом WordPress и должен содержать всю логику тем.
файл функция по теме включен в каждом запросе, но не должен содержать все логики ТЕМА. Как вы организуете файлы без шаблонов вашей темы, вам следует избегать попытки замять весь свой код в файле функций.
Я просмотрел functions.php
темы, которую я загрузил, и имеет более 6000 строк.
К сожалению, для разработчиков тем очень просто сбрасывать весь свой код в файл функций и превращать его в один большой процессуальный кошмар. Не принимайте это как пример того, как все должно быть сделано.
Организуйте свои файлы тем, как и любой другой проект. Лично я люблю придерживаться PSR standards при разработке темы. Файл моих функций обычно содержит несколько констант, PSR-4 autoloader и инициализацию. Например:
// Const
define('MYPROJECT_VERSION', '1.0.3');
define('MYPROJECT_BUILD', 169);
// Autoloader (PSR-4)
// Adapted from https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader-examples.md
spl_autoload_register(function ($class) {
// Project namespace
$prefix = 'MyProject\\';
// Base directory for the namespace prefix
$base_dir = __DIR__ . '/core/';
// Does the class use the namespace prefix
$len = strlen($prefix);
if (strncmp($prefix, $class, $len) !== 0) {
return;
}
// Get the relative class name
$relative_class = substr($class, $len);
// Replace the namespace prefix with the base directory, replace namespace
// separators with directory separators in the relative class name, append
// with .php
$file = $base_dir . str_replace('\\', '/', $relative_class) . '.php';
// If the file exists, require it
if (file_exists($file)) {
/** @noinspection PhpIncludeInspection */
require $file;
}
});
// Initialize
\MyProject\MyTheme::init();
// End of file
Разве это крайне неэффективно, чтобы иметь «установку логику», определение классов и т.д., которые перечитали каждый раз при загрузке страницы?
Если вы используете автозагрузчик, будут включены только классы, которые вы используете.Если вы обеспокоены тем, что PHP нуждается в синтаксическом анализе исходных файлов для каждого запроса в целом, посмотрите на OPCache.
Что касается «логики установки», вы можете использовать крюки after_switch_themes
и switch_themes
для установки и снятия установки соответственно.
add_action('after_switch_theme', function() {
// Install
});
add_action('switch_theme', function() {
// Uninstall
});
Добро пожаловать в Wordpress. Его ужасный беспорядок и не следует рассматривать как хороший пример PHP – PiX06