PHP: 覆盖一个插件 class 方法
PHP: Override a plugin class method
我目前正在使用允许自定义结帐流程的插件 cartflows-pro。我需要在结帐中添加一些详细信息并覆盖 class 方法。
我试图重写 class 方法,但从未调用扩展子 class。
在我的插件中调用的操作
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();
父class文件在另一个class
中被调用
function include_required_class() {
include_once CARTFLOWS_PRO_CHECKOUT_DIR . 'classes/class-cartflows-pro-variation-product.php';
}
如何重写该方法?
如果我在加载 class 之前扩展它,它会抛出一个错误,所以我必须调用 'cartflows_pro_init'
挂钩。
如果我打电话给new Cartflows_Pro_Variation_Product_overriden();
它正在工作,但我得到了两次显示的输出代码
1 个使用普通代码(父)和 1 个使用自定义代码(子)
如果我打电话给new Cartflows_Pro_Variation_Product();
我得到显示两次的基本输出代码
2 没有自定义代码的输出
如果我打电话给Cartflows_Pro_Variation_Product::get_instance();
它什么都不做
知道我应该如何覆盖该方法吗?
我真的不知道如何自动加载。
只是为了更新这个问题。
我没有成功覆盖该方法,所以我尝试了另一种方式
我把需要的数据加上ajax直接输出就解决了!
我目前正在使用允许自定义结帐流程的插件 cartflows-pro。我需要在结帐中添加一些详细信息并覆盖 class 方法。
我试图重写 class 方法,但从未调用扩展子 class。
在我的插件中调用的操作
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();
父class文件在另一个class
中被调用 function include_required_class() {
include_once CARTFLOWS_PRO_CHECKOUT_DIR . 'classes/class-cartflows-pro-variation-product.php';
}
如何重写该方法?
如果我在加载 class 之前扩展它,它会抛出一个错误,所以我必须调用 'cartflows_pro_init'
挂钩。
如果我打电话给new Cartflows_Pro_Variation_Product_overriden();
它正在工作,但我得到了两次显示的输出代码
1 个使用普通代码(父)和 1 个使用自定义代码(子)
如果我打电话给new Cartflows_Pro_Variation_Product();
我得到显示两次的基本输出代码
2 没有自定义代码的输出
如果我打电话给Cartflows_Pro_Variation_Product::get_instance();
它什么都不做
知道我应该如何覆盖该方法吗? 我真的不知道如何自动加载。
只是为了更新这个问题。
我没有成功覆盖该方法,所以我尝试了另一种方式
我把需要的数据加上ajax直接输出就解决了!