我正在从头开始编写我的第一个简单插件,因此我正在寻找一些关于在插件中构建类的建议。我将一些基本函数封装在主插件文件中的一个类中,但我想如果在一个文件中包含许多函数,它会变得非常笨拙。
到目前为止,我的插件目录的结构如下所示:
inc
 -果心php
 -插件设置。php
css
 -风格css
lang
插件文件。php
我一直在努力解决的一件事是使用类将插件构造成多个文件。
主插件文件的代码为:
<?php
/**
* Plugin Name: Plugin name
* Plugin URI: http://someurl.com
* Description: Some description
* Version: 1.0
* Author: Me
* Author URI: http://someurl.com
*/
define( \'SBP_DIR\', plugin_dir_path( __FILE__ ) ); // Defining plugin dir path.
/*----------------------------------------------
Including Files
----------------------------------------------*/
include(SBP_DIR_DIR . \'inc/core.php\'); // main plugin functions
include(SBP_DIR_DIR . \'inc/plugin-settings.php\'); // the plugin options page HTML
/*----------------------------------------------
Class Dummy_Class
----------------------------------------------*/
global $sbp_class;
if ( !class_exists("Dummy_Class") ) {
class Dumy_Class {
/*----------------------------------------------
Function Construct
----------------------------------------------*/
function __construct() {
$this->path = plugin_basename(__FILE__);
add_action( \'init\', array( $this, \'init\' ) );
add_action(\'admin_enqueue_scripts\', array( $this, \'enqueue\' ) );
add_filter("plugin_action_links_$this->path", array( $this, \'sbp_settings_link\' ) );
}
/*----------------------------------------------
Function init
----------------------------------------------*/
function init() {
load_plugin_textdomain( \'sb-pack\', false, basename( dirname( __FILE__ ) ) . \'/lang\' ); // load plugin textdomain
}
/*----------------------------------------------
CSS style of the plugin options page
----------------------------------------------*/
function enqueue($hook) {
global $sbp_settings_page;
if ( $hook != $sbp_settings_page ) // load stylesheet only on plugin option page
return;
wp_enqueue_style(\'styles\', plugin_dir_url( __FILE__ ) . \'css/styles.css\');
}
/*----------------------------------------------
Add settings link on plugins page
----------------------------------------------*/
function sbp_settings_link($links) {
$settings_link = \'<a href="options-general.php?page=sbp-options">Settings</a>\';
array_unshift($links, $settings_link);
return $links;
}
} //End class Dummy_Class
$sb_pack = new Dummy_Class; // instantiate the plugin class
} //End if (!class_exists("Dummy_Class"))
我想提一下核心。php文件包含插件的功能,即一些函数。
我的问题是:
核心应包括哪些内容。php和插件设置。主插件文件中的php文件那些文件也应该有唯一的类?您将如何构建它们?为什么我对OOP没有深入的了解,所以我需要一点循序渐进的指导。
如有任何想法,将不胜感激。
最合适的回答,由SO网友:fuxia 整理而成
插件中对象组织的一些基本规则。
每个文件一个类声明,该文件中没有其他代码。创建新实例–new Dummy_Class
– 不应与类声明位于同一文件中。
向用户发送数据的所有内容(演示文稿)都应该有自己的类:HTML、CSV、XML输出或HTTP头。
每个算法、每个数据源都应该有自己的类,因此您可以在以后对其进行更改。比方说,您将一些数据存储在一个选项中,并希望稍后对其进行更改以使用自定义数据库表:那么您应该能够在不更改所有文件的情况下进行更改。
对象的注册和创建属于一个单独的类(控制器)。add_action( \'something\', array( $this, \'callback\' ) )
通常是糟糕设计的标志。使用单独的对象,而不是$this
.
避免使用全局常量,因为它们会使全局命名空间变得混乱。只需将当前插件文件的路径传递给主控制器。