问题描述

我得到了基本的插件概念。我已经阅读了关于 Writing a Plugin 的法典文章

那篇文章谈到 「主要的插件文件」 。

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:主插件目录中是否应该有最多一个 php 文件?

谢谢。

最佳解决方案

How does WordPress determine “the main plugin file” ?

这是您的插件中包含插件标题注释的文件

/**
 * 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: Is it legal / supported to have a plugin that is structured like this:

是。每个目录结构 (只要服务器支持) 是合法的。

Q2: If so, how does wordpress determine which php file is the main plugin file?

见上面↑

Q3: Is the use of a subdirectory (like inc/ in the above example) a requirement when the PHP code spans multiple modules?

需求?不太好看:是的。更容易维护:也可以。

Q4: Is it true that there should be a maximum of ONE php file in the main plugin directory?

不,没有。

总结

您完全组织文件和目录的方式取决于您,您的个人喜好,而无其他事项。如果你想让你更容易维护和其他开发人员逐步执行你的代码,那么你应该使用某种文件/目录组织。

例子

当我上课时,我个人将.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.phpsettings_extended.class.php

  • my_class_prefix_settingsmy_class_prefix_settings_extended

我也做一些基本的目录组织,比如将所有 js/css/img 文件存储在这样的目录中。

有些人使用名为 inc/includes/assets/extensions/lib/etc. 的大型插件文件夹。我建议仅使用子文件夹进行大型插件。如果你有其他的东西,如小工具等,那么你可以为他们使用特定的子文件夹。

最后一句话:不,没有什么你发现是真的,那些 (像我显示的东西) 只是建议。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。