问题

在分析他人开发的Wordpress插件时,有时发现在其插件根目录下存在一个index.php文件。有时是空内容,有时非空而且关键代码就写在这个文件中。但是,根据最新的Wordpress.org官方文档中有关插件开发建议文件夹架构的介绍,并没有提到index.php文件的问题。那么,为什么网络上的一些Wordpress插件中有的其插件根目录下存在一个index.php文件呢?这个文件是否是必需的?作用如何?


正解


带着上述问题,进行网络搜索,目前基本得到的答案(主要参考官方最新文档)如下。

首先来看一下官方最新文档有关插件开发文件夹架构建议:


/plugin-name
plugin-name.php
uninstall.php
/languages
/includes
/admin
/js
/css
/images
/public
/js
/css
/images


根据stackexchange.com网站上的有关分析,估计这个Index.php是早期官方提供的一种建议,也就是说,在插件开发时,可以在其根目录下放置一个空的Index.php文件。通过这种简单的方式,可以实现简单意义上的保护插件目录下文件可能被访问者错误访问的目录。但是,现在看起来这种简单的保护技术已经不太实用了。因此,官方也就不再提供这种建议。但是,继续使用这个文件并没有被官方彻底抛弃。而且,这个文档可以是非空的,你可以在其中放置如上述最新架构中等同于文件plugin-name.php中的内容(有兴趣的朋友可以搜索‘hd-quit’这个插件分析一下)。但是,这样一来给开发者用户一种误导!因此,有关根目录下的Index.php这个文件的问题算是wordpress历史发展中的一个‘小插曲’吧。


补充

在官方插件开发文档中,我还发现了一个有关案例“​​WordPress-Plugin-Boilerplate​​​”,也是官方推荐的文件架构之一。但是,此github上的项目也是许多年以前就存在的,更新的最近日期在2019年。这个项目的插件根目录下就有一个空的index.php,内容如下:


<?php // Silence is golden


结合官方推荐的上面最新框架,看看这个Boilerplate的架构吧:

Wordpress插件开发|关于根目录下index.php_根目录



参考

​https://github.com/DevinVinson/WordPress-Plugin-Boilerplate/tree/master/plugin-name​