结构/设计模式解决方案

时间:2015-10-22 05:28:23

标签: php wordpress oop design-patterns

我正在尝试创建一个WordPress插件并遇到路障。我正在创建一个需要由子类扩展的设置页面。主要类看起来像这样。

class SettingsPage {

    // Properties

    // Methods

   public function metaboxes() {
       add_meta_box( //metabox params );
   }   

}

此课程将处理主要设置页面。我现在希望能够从几个子类中创建元框。基本上扩展/附加到metaboxes()方法。

class MetaBoxOne extends SettingsPage {

    public function metabox() {

         // add another metabox

    }

}

这个问题的最佳解决方案是什么?我一直盯着我的代码编辑器几个小时试图找出它没有运气。任何帮助将不胜感激。

继承是最好的途径吗?

2 个答案:

答案 0 :(得分:0)

此设计可以使用更多Composition。还定义了IMetaBox(接口)以确保您的页面类具有功能,这将允许您调整其内容和行为。因此,您的设置页面可能如下所示:

class SettingsPage {

    // Fields
    ICollection<IMetaBox> _metaBoxes;
    // Properties

    // Methods

   public function metaboxes() {
       add_meta_box( //metabox params );
   }   

} 

所有

  

需要通过子类扩展

将具有管理元变量所需的ICollection<T>的内置功能,剩下要做的就是调用一个迭代集合的显示方法。

答案 1 :(得分:0)

<强>更新

也许这篇文章对您有所帮助: http://code.tutsplus.com/articles/integrating-with-wordpress-ui-meta-boxes-on-custom-pages--wp-26843

首先,如果您想为自己的插件创建设置页面,我建议您使用内置的Settings API。 This tutorial教你如何掌握这个API的概念。

其次,我认为您无法在自定义设置页面上使用元数据,因为'add_meta_boxes'挂钩仅在编辑帖子页面上触发,请参阅codex

  

高级操作本节包含与查询相关的操作   WordPress用来确定要显示的帖子,WordPress   循环,激活插件和其他基本级别的WordPress代码。

     

add_meta_boxes加载“编辑帖子”页面时运行。 (3.0 +)

最后:在其他情况下,如果你有一个主容器,它包含子实体,并且你想收集主容器中的子实体,我认为你应该遵循核心Wordpress模式,回调动作挂钩。在主收集器中,您必须使用以下命令定义自定义操作挂钩:

do_action('your_plugin_main_collector_do_something', $param1, $param2, $param3, ...);

您的子实体应将自己注册到主容器中:

add_action('your_plugin_main_collector_do_something', 'my_entity_callback_function_name', $priority_default_10, $how_many_parameters_you_have_to_use);