作者:

WordPress插件开发基础-新手入门2

2021年7月26日 分类:未分类

构建插件需要注意以下几个问题:

避免命名冲突


当您的插件中的变量、函数或类使用与另一个插件相同的名称时,就会发生命名冲突。

您可以使用以下方法避免命名冲突。

  • 编码方法,默认情况下,所有变量、函数和类都定义在全局命名空间中,这意味着您的插件可以覆盖另一个插件设置的变量、函数和类,反之亦然。在函数或类中定义的变量不受此影响。
  • 使用前缀,所有变量、函数和类都使用唯一标识符作为前缀。前缀可防止其他插件覆盖您的变量或者调用您的函数和类。
  • 检查是否存在相同的名称,PHP 提供了许多函数来验证变量、函数、类和常量的存在。 如果存在,将返回 true。

使用以下验证方法:

变量: isset() (includes arrays, objects, etc.)
函数: function_exists()
类: class_exists()
常量: defined()

示例:

//Create a function called "wporg_init" if it doesn't already exist
if ( !function_exists( 'wporg_init' ) ) {
    function wporg_init() {
        register_setting( 'wporg_settings', 'wporg_option_foo' );
    }
}
 
//Create a function called "wporg_get_foo" if it doesn't already exist
if ( !function_exists( 'wporg_get_foo' ) ) {
    function wporg_get_foo() {
        return get_option( 'wporg_option_foo' );
    }
}
  • 面向对象的方法

解决命名冲突问题的一种更简单的方法是为插件的代码使用一个类。

但仍然需要检查的类的名称是否已经被占用,其余的将由 PHP 处理。

示例:

if ( !class_exists( 'WPOrg_Plugin' ) ) {
    class WPOrg_Plugin
    {
        public static function init() {
            register_setting( 'wporg_settings', 'wporg_option_foo' );
        }
 
        public static function get_foo() {
            return get_option( 'wporg_option_foo' );
        }
    }
 
    WPOrg_Plugin::init();
    WPOrg_Plugin::get_foo();
}

文件的结构:

plugin-name.php与uninstall.php放在插件文件夹的根目录,其余的放在子文件夹下。

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

插件的架构

小型插件,或单一用途插件,不用太细分,如果是大型插件或是方便以后扩展,单独的样式和相关的文件,有助于代码组织和插件的长期维护。

Admin管理代码和前台代码的分离

使用is_admin()

示例:

if ( is_admin() ) {
    // we are in admin mode
    require_once __DIR__ . '/admin/plugin-name-admin.php';
}

架构模式,分为三类:

  • 单个插件文件,包含函数
  • 单个插件文件,包含一个类、实例化的对象和可选的函数
  • 主插件文件,然后是一个或多个类文件

发表回复

您必须登录后才可以发布评论。

跳至工具栏