Class 'WC_Email' 在基于样板的插件中创建自定义 WooCommerce 电子邮件时未发现错误

Class 'WC_Email' not found error when creating custom WooCommerce email in Boilerplate-based plugin

我正在尝试向 WooCommerce 添加自定义电子邮件。我找到了几个关于如何这样做的好教程。他们都扩展了 WC_Email class 来定义他们的新电子邮件类型。尝试这样做时出现错误,提示未找到 class。

注意:我的插件是使用 Boilerplate 创建的,因此它加载内容的顺序或方式可能与我找到的任何教程所使用的顺序或方式不同。

WooCommerce 挂钩和过滤器的其他用途工作正常,能够达到 WC 功能。是什么阻止了 class 的扩展?我假设我没有正确引用它,或者在 Boilerplate 尝试使用它时它没有加载。但是我现在已经花了几天时间几个小时了,但我仍然被困住了。如有任何帮助,我们将不胜感激。

我的 Boilerplate top class 有其标准功能:

private function load_dependencies() {
.
. Additional requirements as defaulted by Boilerplate
.
        /**
         * The class responsible for defining the custom WooCommerce email 
         */
        require_once plugin_dir_path( dirname( __FILE__ ) ) . 'emails/class_wc_ready_for_pickup_email.php';

        $this->loader = new MyPlugin_Plugin_Loader();

    }

准备好取件 class 文件说:

class WC_Ready_for_Pickup_Email extends WC_Email. <<<<< This is where the error occurs
{
    /**
     * Set email defaults
     *
     * @since 0.1
     */
    public function __construct() {

        // set ID, this simply needs to be a unique name
        $this->id = 'wc_ready_for_pickup';
.
. Additional code as shown in tutorials
.
}
...

准确的错误是

Fatal error: Uncaught Error: Class 'WC_Email' not found in /Users/me/Local Sites/my-site/app/public/wp-content/plugins/my-plugin/emails/class_wc_ready_for_pickup_email.php on line 7

在您初始化自定义电子邮件 class 并扩展它时,class WC_Email 似乎不可用。因为我记得你应该通过钩子添加电子邮件 classes 而不是直接在你的 class 构造函数中:

add_filter( 'woocommerce_email_classes', 'filter_woocommerce_email_classes' );
function filter_woocommerce_email_classes( array $email_classes ): array {
    require_once plugin_dir_path( dirname( __FILE__ ) ) . 'emails/class_wc_ready_for_pickup_email.php';

    $email_classes['WC_Ready_for_Pickup_Email'] = new WC_Ready_for_Pickup_Email();

    return $email_classes;
}