如何在编写OOP时等待WordPress内核加载?

时间:2018-04-17 作者:Lucas Bustamante

我想创建一个助手重定向函数,如下所示:

/**
*   Just an example of using redirect()
*/
public function validate_something() {
    if (1 == 0) {
        $this->redirect(\'register\');
    }
}
但是,在public function redirect(), 我想使用一些只有在WordPress核心加载后才可用的功能,例如get_site_url().

考虑到这一点,我创建了一种中间函数,如下所示:

/**
*   Receives a redirect request and passes it to an add_action
*/
public function redirect($to) {
    $this->to = $to;
    add_action( \'init\', [$this, \'redirect_wp\'], 10, 1 );
}

/**
*    Processes an redirect request
*/
public function redirect_wp() {
    header(\'Location: \'.get_site_url().\'/\'.$this->to);
    exit;
}
然而,redirect_wp() 从未调用。此外,我觉得自己在架构上做错了什么,但我不知道到底是什么。

请考虑到这些重定向方法在实时代码中要复杂得多,例如通过会话传递错误消息和旧输入。上面的代码只是结构的一个示例。

2 个回复
SO网友:Mark Kaplun

核心问题是您没有编写OOP。OOP是关于识别系统中的对象,而不是操作。如果您想识别操作,最好遵循功能设计范式(使用wordpress挂钩系统,功能设计更有意义)。

在您的情况下,重定向是一个操作,可能遵循对象状态转换,因此它不应该是类的外部API。

当然,这种情况下的对象可以是“重定向控制器”,或者更好的是“浏览器”对象,但对于大多数人来说,这将是一个太多的抽象级别。

请考虑到这些重定向方法在实时代码中要复杂得多,例如通过会话传递错误消息和旧输入

因此,这是一个复杂的决策树的情况,但听起来没有任何对象状态转换,因此它实际上不应该是对象的一部分,至少不应该超过效用函数。

SO网友:Oleg Butuzov

在构造函数方法中添加操作/筛选器。

public function __construct(){
   add_action(\'init\', [ $this, \'real_constructor_goes_here\' ]);
}

结束

相关推荐

无法删除通过OOP添加的元框

请不要将此问题标记为重复或拒绝投票,因为我尝试了所有文档(旧文档和新文档)、所有网站、论坛等上的所有代码,但没有任何东西对我有效。。。我通过以下代码添加了元框:https://developer.wordpress.org/plugins/metadata/custom-meta-boxes/#oop然后我转到一篇帖子,将select的值改为“Something”,并保存了帖子现在我需要删除元框,但我不知道如何以任何方式。。。remove_meta_box(\'wporg_box_id\', [\'pos