Je construis un thème personnalisé pour une utilisation interne uniquement. J'ai commencé par intégrer un grand nombre de fonctions de base dans les plug-ins, mais cela semblait ridicule, car elles ne nécessitent aucune interaction de l'utilisateur.
Ensuite, je mets toutes mes classes dans différents fichiers php dans mon dossier de thème et include
toutes dans functions.php.
Y a-t-il une meilleure manière de faire cela?
Comme @toscho l'a mentionné dans son commentaire, votre meilleur choix est probablement un autochargeur de quelque sorte ...
foreach ( glob( plugin_dir_path( __FILE__ ) . "subfolder/*.php" ) as $file ) {
include_once $file;
}
Il y a des plugins qui font ce genre de chose ou possilby quelque chose comme des extraits de code , mais je vais ajouter quelques exemples ci-dessous ...
Cet exemple vous permet d'ajouter et de supprimer facilement des fonctionnalités à l'aide de theme-support. Donc, fondamentalement, dans votre functions.php
, vous pouvez ceci ....
add_theme_support( feature-one );
add_theme_support( feature-two );
add_theme_support( feature-three );
Créez un plugin de base avec la structure suivante:
plugin-name/
├── plugin-name.php
├── features/feature-one.php
├── features/feature-two.php
├── features/feature-three.php
└── features/feature-four.php
Dans plugin-name.php include this code:
<?php
/*
Plugin Name: My Themename Addons
Plugin URI: https://example.com/
Description: Add Themename support
Version: 1.0.0
Author: bryanwillis
Author URI: https://github.com/bryanwillis/
License: MIT License
License URI: http://opensource.org/licenses/MIT
*/
function mytheme_autoload_files() {
global $_wp_theme_features;
foreach (glob(__DIR__ . '/theme-support/*.php') as $file) {
$feature = 'mytheme-' . basename($file, '.php');
if (isset($_wp_theme_features[$feature])) {
require_once $file;
}
}
}
add_action('after_setup_theme', 'mytheme_autoload_files', 100);
Cet exemple n'a pas la possibilité de supprimer des fonctionnalités à la volée, mais il charge automatiquement tout ...
theme-plugins
.autoloader.php
dans le dossier theme-plugins avec le code ci-dessous et utilisez include/require/etc. dans votre functions.php pour l'inclure (vous pouvez aussi en faire un plugin).theme-plugins
pour les charger automatiquement (les plugins doivent porter le même nom de dossier que le nom de fichier).Structure du dossier:
themename/
└── theme-plugins/
├── autoloader.php
├── plugin-one/plugin-one.php
├── plugin-two/plugin-two.php
├── plugin-three/plugin-three.php
└── plugin-foo/plugin-foo.php
Code pour autoloader.php
:
<?php
/**
* Autoloader - theme-plugins/autoloader.php
*/
function themename_plugins_autoloader() {
$plugins_dirs = = array_filter( scandir() );
$non_dirs = array(
'.',
'..',
'.DS_Store',
);
for( $i = 0; $i < count( $non_dirs ); $i++ ) {
$not_dir_key = array_search( $non_dirs[ $i ], $$autoload_plugin_dirs );
if( $not_dir_key !== false ) {
unset( $$autoload_plugin_dirs[ $not_dir_key ] );
}
unset( $not_dir_key );
}
unset( $non_dirs );
if( empty( $$autoload_plugin_dirs ) ) {
return;
}
sort( $$autoload_plugin_dirs );
foreach( $$autoload_plugin_dirs as $dir ) {
$plugin_dir = plugin_dir_path( __FILE__ ) . $dir;
$plugin_file = trailingslashit( $plugin_dir ) . $dir . '.php';
if( is_dir( $plugin_dir ) && file_exists( $plugin_file ) ) {
require_once( $plugin_file );
}
unset( $plugin_file, $plugin_dir );
}
}
themename_plugins_autoloader();
Je stocke les fonctions principales dans un thème parent, puis charge les fonctions spécifiques au site dans un thème enfant.
Avantages: