プラグインのディレクトリはどのように構造化する必要がありますか?


9

基本的なプラグインのコンセプトがわかります。プラグインの作成に関するコーデックスの記事を読みました

その記事では、「メインプラグインファイル」について説明しています。

Wordpressは「メインプラグインファイル」をどのように決定しますか?

Q1:次の
ような構造のプラグインを持つことは合法/サポートされていますか?

  • pluginname /
  • pluginname / mainfile.php
  • pluginname / supportingcode-1.php
  • pluginname / supportingcode-2.php
  • pluginname / Readme.txt
  • 等..

Q2:
その場合、wordpressはどのphpファイルがメインのプラグインファイルであるかをどのように決定しますか?


このようにコードを構造化します」という推奨事項を見てきました。

  • pluginname /
  • pluginname / mainfile.php
  • pluginname / inc / supportingcode-1.php
  • pluginname / inc / supportingcode-2.php
  • pluginname / Readme.txt
  • 等..

Q3: PHPコードが複数のモジュールにまたがる場合、
inc/上記の例のように)サブディレクトリを使用する必要がありますか?

Q4:
メインプラグインディレクトリに最大1つのphpファイルがあるべきであるというのは本当ですか?

ありがとう。


確かにあなたの最初の質問「WordPressがメインのPHPファイルをどのように決定するか」は、ファイルヘッダー
icc97

回答:


12

Wordpressは「メインプラグインファイル」をどのように決定しますか?

プラグインヘッダーコメントを含むプラグイン内のファイル

/**
 * Plugin Name: A fresh example
 * Plugin URI:  http://example.com
 * Description: Foo makes a bar
 * Version:     2012-06-14.1426
 * Author:      John Doe
 * Author URI:  http://example.com
 * TextDomain:  your_textdomain
 * License:     MIT
 * LicenseURI:  http://www.opensource.org/licenses/mit-license.php
 */

Q1:次のような構造のプラグインを持つことは合法/サポートされていますか?

はい。すべてのディレクトリ構造(サーバーでサポートされている限り)は有効です。

Q2:その場合、wordpressはどのphpファイルがメインのプラグインファイルであるかをどのように決定しますか?

上記を参照してください↑

Q3:PHPコードが複数のモジュールにまたがる場合、サブディレクトリ(上記の例のinc /のような)の使用は要件ですか?

要件?いいえ。読みやすい:はい。メンテナンスが簡単:はい。

Q4:メインプラグインディレクトリに最大1つのphpファイルがあるべきであるというのは本当ですか?

いいえ、単にいいえ。

要約する

ファイルとディレクトリを完全に整理する方法は、あなた次第です。個人的な好みだけで、他には何もありません。保守を容易にし、他の開発者がコードをステップスルーできるようにする場合は、何らかのファイル/ディレクトリ構成を使用する必要があります。

.class.phpクラスを取得したとき、私は個人的に拡張子として追加します。また、クラスとまったく同じようにファイルに名前を付けます。理由は簡単です。私の「メインプラグインファイル」-これは私のbootstrapクラスであり、通常、必要なものすべてをロードすることに関心があります。

// inside my PREFIX_bootstrap class:
public static $includes = array(
    'settings'          => false // Parent class - no need to hook
   ,'settings_extended' => true  // Extending class - hooks static init() on `init` hook
);

public function construct()
{
    // The prefix for every class in my plugin
    $prefix = 'my_class_prefix_';

    foreach ( $this->files as $handle => $hook )
    {
        require_once plugin_dir_path( __FILE__ )."{$handle}.class.php";

        if ( ! $hook )
            continue;

        $class = $prefix.$handle;
        class_exists( $class ) AND add_action( 'init', array( $class, 'init' ), 1 );
    }
}

つまり、クラスとファイルの名前は次のようになります。

  • settings.class.php そして settings_extended.class.php
  • my_class_prefix_settings そして my_class_prefix_settings_extended

また、js/css/imgこのような名前のディレクトリにすべてのファイルを保存するなど、いくつかの基本的なディレクトリ構成も行います。

一部の人々は(より大きなプラグインのために)という名前のフォルダを使用しますinc/includes/assets/extensions/lib/etc.。大きなプラグインにのみサブフォルダーを使用することをお勧めします。ウィジェットなどの追加のものがある場合は、それらに特定のサブフォルダーを使用できます。

最後の言葉:いいえ、あなたが見つけたものは真実ではありません。それら(私があなたに示したもののように)は単なる推奨です。


1
この回答をありがとうございます。したがって、ヘッダーコメントは、ワードプレスが「メインプラグインファイル」を見つける方法です。それだけロードしますよね?そしてもちろん、そのファイルに必要な、または含まれている他のすべてのphpファイル。正しい?コーデックスではそれがはっきりしなかっただけだと思います。読み直すだけで、今何が起こっているのかがわかります。「Wordpressはこの特別なヘッダーを持つzip内の1つのファイルを検索します。zip内の他のファイルは無視します。またはそれらの線に沿って何か。まあありがとう。
Cheeso

はい、指定したファイルと「メイン」ファイルのみをロードします。すべてのリクエストですべてが読み込まれないようにするために、ページ固有の部分を持つフックがあることに注意してください。
カイザー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.