私は社内での使用のみを目的としたカスタムテーマを作成しています。私は最初にプラグインにコア機能の多くを入れることから始めました、しかしそれからそれらが少しのユーザー相互作用も必要としないのでそれは愚かに見えました。
次に、私はすべてのクラスを私のテーマフォルダ内の異なるphpファイルに入れ、include
name__それらすべてをfunctions.phpに入れます。
これを行うより良い方法はありますか?
@toschoが彼のコメントで述べたように、あなたの最善の策はおそらくなんらかの オートローダ です...
foreach ( glob( plugin_dir_path( __FILE__ ) . "subfolder/*.php" ) as $file ) {
include_once $file;
}
このようなこと や コードスニペット のようなことをするプラグインがあります)、しかし私は以下のいくつかの例を追加します...
この例では、テーマサポートを使用して機能を簡単に追加および削除できます。だから基本的にあなたのfunctions.php
でこれができます....
add_theme_support( feature-one );
add_theme_support( feature-two );
add_theme_support( feature-three );
次の構造を持つ基本的なプラグインを作成します。
plugin-name/
├── plugin-name.php
├── features/feature-one.php
├── features/feature-two.php
├── features/feature-three.php
└── features/feature-four.php
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);
この例にはその場で機能を削除するオプションはありませんが、自動的にすべてをロードします...
theme-plugins
という名前のフォルダを追加します。autoloader.php
というファイルを作成し、include/require/etcを使用します。それをインクルードするためにあなたのfunctions.phpに(あなたはこれをそれ自身のプラグインにすることもできます)。theme-plugins
フォルダ内にドロップします(プラグインはファイル名と同じフォルダ名を持つ必要があります)。フォルダ構造:
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
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();
コア機能を親テーマに格納し、次にサイト固有の機能を子テーマにロードします。
利点: