同じサードパーティのPHPライブラリをすべて使用する、いくつかのオープンソースプラグインとテーマ(すべて「スイート」の一部)を開発しています。私はそれをワードプレスに含めるための最良の方法は何だろうと思っています。ここにいくつかの考えがあります:
- プラグインの1つに配置し、そのプラグインをインストールしてアクティブ化する必要がある
- それを含める以外に何もしない特別な「コア」プラグインを作成する
- 直接入れる
wp-content
そのことについて何か考えはありますか?
同じサードパーティのPHPライブラリをすべて使用する、いくつかのオープンソースプラグインとテーマ(すべて「スイート」の一部)を開発しています。私はそれをワードプレスに含めるための最良の方法は何だろうと思っています。ここにいくつかの考えがあります:
wp-content
そのことについて何か考えはありますか?
回答:
各プラグイン/テーマがそれ自体で機能する場合は、ライブラリをすべてのテーマ/プラグインにドロップする必要があります。
次に、サードパーティライブラリのクラスまたは関数が存在するかどうかを確認してから、それを必要とします。
<?php
if( class_exists( 'SomeClass' ) )
{
// require/include here
}
または
<?php
if( function_exists( 'some_function' ) )
{
// Require/include stuff here
}
または、プラグイン可能な関数のように、サードパーティライブラリのすべての関数/クラス/変数/定数をチェックして、それが存在するかどうかを確認することもできます。
すべてのプラグインとテーマが互いに依存している場合、それらを分割することは実際にはあまり意味がなく、おそらくそれを再考する必要があります。
library
を各プラグイン/テーマのフォルダに入れます。次に、メインプラグインファイルでチェックを実行し、必要に応じてそれらを含めます。
すべての依存コードをライブラリプラグインのアクションにバインドします。
ライブラリプラグインのサンプルコード:
add_action( 'plugins_loaded', 'load_library', 0 );
function load_library()
{
# load all the classes and files you need
# Set up $plugin_url and $plugin_directory
do_action( 'library_loaded', $plugin_url, $plugin_directory );
}
依存するコードでは、アクションが呼び出される前は何もしません。
add_action( 'library_loaded', 'start_my_code', 10, 2 );
function start_my_code( $lib_url, $lib_directory )
{
# do stuff
}
ライブラリはすべての基本的な部分を処理します。適切なPHPバージョン、WordPress定数、マルチサイト設定などを確認してください。
アクション'library_loaded'
が呼び出されない場合、他のコードは何もしません。
ライブラリがPHPクラスの形式である場合、chrisguitarguyによる回答に加えて、spl_autoload_register()を使用して、別のプラグインによってまだロードされていないクラスをロードできます。次に、ライブラリをプラグインにバンドルしてそれらを使用し、必要に応じてクラスローダーを使用してそれらを含めることができます。クラスローダーを使用して、独自のプラグインのクラスをロードすることもできます。
例えば
define('WPSE_31726_PLUGIN_ROOT', dirname(__FILE__) . '/');
/**
* autoload classes as/when needed
* @param string $class_name name of class to attempt to load
*/
function wpse_31726_autoload($class_name) {
static $classMap = array (
'Wpse31726_Admin' => 'class.Wpse31726_Admin.php',
'Wpse31726_CsvLoader' => 'class.Wpse31726_CsvLoader.php',
'Wpse31726_Plugin' => 'class.Wpse31726_Plugin.php',
'parseCSV' => 'lib/parsecsv/parsecsv.lib.php',
);
if (isset($classMap[$class_name])) {
require WPSE_31726_PLUGIN_ROOT . $classMap[$class_name];
}
}
// register function for autoloading required classes
spl_autoload_register('wpse_31726_autoload');
以来公式ベンダーのディレクトリが存在しない、私は何もしない「コア」のプラグインのために行くが、ライブラリが含まれます。次に、プラグインにそのコアプラグインを要求させます。
ライブラリを実際のプラグインの1つに配置するには、ユーザーはその機能を使用したくない場合でも、そのプラグインを有効にする必要があります。別個のコアプラグインはよりクリーンに見えます。
wp-contentに直接配置することは、最悪のソリューションのように見えます。