在基于 Boilerplate 的插件中创建自定义 WooCommerce 电子邮件时未找到“WC_Email”类错误

问题描述

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

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

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

我的 Boilerplate 顶级类有它的标准功能

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 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

解决方法

看起来类 WC_Email 在您初始化自定义电子邮件类并对其进行扩展时不可用。因为我记得你应该通过一个钩子而不是直接在你的类构造函数中添加电子邮件类:

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;
}