【问题标题】:PHP: Override a plugin class methodPHP:覆盖插件类方法
【发布时间】:2019-12-21 23:08:27
【问题描述】:

我目前正在使用一个插件,允许进行自定义结帐流程,cartflows-pro。我需要在结帐中添加一些细节并覆盖一个类方法。

我试图重写类方法,但从未调用扩展的子类。

在我的插件中调用的操作

add_action( 'cartflows_pro_init', function() {

    if ( class_exists( 'Cartflows_Pro_Variation_Product' ) )
    {
        class Cartflows_Pro_Variation_Product_overriden extends Cartflows_Pro_Variation_Product {

            public function single_sel_variation_product_markup( $current_product, $single_variation, $type = '' ) {
                               // some custom code
                return $output;
            }

        }

        Cartflows_Pro_Variation_Product::get_instance();

    } 
} );

要覆盖的插件:

class Cartflows_Pro_Variation_Product {
    private static $instance;

    public static function get_instance() {
        if ( ! isset( self::$instance ) ) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    public function __construct() {

        add_action( 'cartflows_add_before_main_section', array( $this, 'product_variation_option_position' ) );

    }

    function product_variation_option_position( $output ) {
                // some code
        $output .= $this->single_sel_variation_product_markup( $current_product, $single_variation );
                return $output;
        }

    function single_sel_variation_product_markup( $current_product, $single_variation, $type = '' ) {
                // some code
                return $output;
            }


}

Cartflows_Pro_Variation_Product::get_instance();

父类文件在其他类中被调用

    function include_required_class() {
        include_once CARTFLOWS_PRO_CHECKOUT_DIR . 'classes/class-cartflows-pro-variation-product.php';
    }

如何覆盖该方法? 如果我在加载类之前扩展它会引发错误,所以我必须调用 'cartflows_pro_init' 钩子。

如果我打电话给new Cartflows_Pro_Variation_Product_overriden(); 它正在工作,但我的输出代码显示了两次 1 个普通代码(父)和 1 个自定义代码(子)

如果我打电话给new Cartflows_Pro_Variation_Product(); 我得到显示两次的基本输出代码 2 没有自定义代码的输出

如果我打电话给Cartflows_Pro_Variation_Product::get_instance(); 它什么都不做

知道我应该如何覆盖该方法吗? 我真的不知道如何自动加载。

【问题讨论】:

    标签: php wordpress class overriding monkeypatching


    【解决方案1】:

    只是为了更新这个问题。

    我没有成功覆盖该方法,所以我尝试以另一种方式进行

    我通过ajax添加需要的数据直接输出解决了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      相关资源
      最近更新 更多