如何使用类将一个插件组织成多个文件?

时间:2014-05-10 作者:Knott

我正在从头开始编写我的第一个简单插件,因此我正在寻找一些关于在插件中构建类的建议。我将一些基本函数封装在主插件文件中的一个类中,但我想如果在一个文件中包含许多函数,它会变得非常笨拙。

到目前为止,我的插件目录的结构如下所示:

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没有深入的了解,所以我需要一点循序渐进的指导。

如有任何想法,将不胜感激。

1 个回复
最合适的回答,由SO网友:fuxia 整理而成

插件中对象组织的一些基本规则。

每个文件一个类声明,该文件中没有其他代码。创建新实例–new Dummy_Class – 不应与类声明位于同一文件中。

向用户发送数据的所有内容(演示文稿)都应该有自己的类:HTML、CSV、XML输出或HTTP头。

每个算法、每个数据源都应该有自己的类,因此您可以在以后对其进行更改。比方说,您将一些数据存储在一个选项中,并希望稍后对其进行更改以使用自定义数据库表:那么您应该能够在不更改所有文件的情况下进行更改。

对象的注册和创建属于一个单独的类(控制器)。add_action( \'something\', array( $this, \'callback\' ) ) 通常是糟糕设计的标志。使用单独的对象,而不是$this.

避免使用全局常量,因为它们会使全局命名空间变得混乱。只需将当前插件文件的路径传递给主控制器。

结束

相关推荐

wp add inline style in loop

由于wp\\u add\\u inline\\u style wordpress函数,我想添加内联样式。内联样式将添加到循环中。在我的例子中,我在循环中输出了一个同位素网格,这个网格可以为每个网格进行不同的css定制。实际上,我有一个php脚本:function grid_register_styles(){ $themeversion = wp_get_theme()->display(\'Version\'); wp_register_style( \'grid