在插件中扩展WooCommerce COD支付网关



我想了解Wordpress中加载各种类的顺序。Wordpress中有很多插件,那么谁会比其他插件更早加载。

考虑一下我想开发一个插件,它将使用Wooccommerce的一些现有类。基本上,我的自定义插件将扩展Wooccommerce的某些类(例如:WC_Gateway_COD(

如何确保现有类"WC_Gateway_COD"已定义&在执行以下语句之前加载?

if (class_exists('WC_Gateway_COD')) {
class WC_my_custom_class extends WC_Gateway_COD {
…..
….
}
}  

要基于现有的WooCommerce支付方式作为COD制作自定义网关,建议在插件中复制WC_Gateway_CODclass的源代码(根据您的需求调整代码(,如:

defined( 'ABSPATH' ) or exit;
// Make sure WooCommerce is active
if ( ! in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
return;
}
add_filter( 'woocommerce_payment_gateways', 'wc_custom_add_to_gateways' );
function wc_custom_add_to_gateways( $gateways ) {
$gateways[] = 'WC_Gateway_COD2';
return $gateways;
}
add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), 'wc_gateway_custom_plugin_links' );
function wc_gateway_custom_plugin_links( $links ) {
$plugin_links = array(
'<a href="' . admin_url( 'admin.php?page=wc-settings&tab=checkout&section=cod2' ) . '">' . __( 'Configure', 'payment_cod2' ) . '</a>'
);
return array_merge( $plugin_links, $links );
}
add_action( 'plugins_loaded', 'wc_gateway_cod2_init', 11 );
function wc_gateway_cod2_init() {
class WC_Gateway_COD2 extends WC_Payment_Gateway {
public $domain; // The text domain (optional)
/**
* Constructor for the gateway.
*/
public function __construct() {
$this->domain = 'payment_cod2'; // text domain name (for translations)
// Setup general properties.
$this->setup_properties();

// Load the settings.
$this->init_form_fields();
$this->init_settings();

// Get settings.
$this->title              = $this->get_option( 'title' );
$this->description        = $this->get_option( 'description' );
$this->instructions       = $this->get_option( 'instructions' );
$this->enable_for_methods = $this->get_option( 'enable_for_methods', array() );
$this->enable_for_virtual = $this->get_option( 'enable_for_virtual', 'yes' ) === 'yes';

add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, array( $this, 'process_admin_options' ) );
add_action( 'woocommerce_thankyou_' . $this->id, array( $this, 'thankyou_page' ) );
add_filter( 'woocommerce_payment_complete_order_status', array( $this, 'change_payment_complete_order_status' ), 10, 3 );

// Customer Emails.
add_action( 'woocommerce_email_before_order_table', array( $this, 'email_instructions' ), 10, 3 );
}

/**
* Setup general properties for the gateway.
*/
protected function setup_properties() {
$this->id                 = 'cod2';
$this->icon               = apply_filters( 'woocommerce_cod2_icon', '' );
$this->method_title       = __( 'Cash on delivery', 'woocommerce' );
$this->method_description = __( 'Have your customers pay with cash (or by other means) upon delivery.', 'woocommerce' );
$this->has_fields         = false;
}
// and so on (the rest of the code)…
}
}

您可以取消设置/删除原始COD支付网关,更改第一个功能,如:

add_filter( 'woocommerce_payment_gateways', 'wc_custom_add_to_gateways' );
function wc_custom_add_to_gateways( $gateways ) {
$gateways[] = 'WC_Gateway_COD2';
unset($gateways['WC_Gateway_COD']; // Remove COD gateway
return $gateways;
}

相关内容

  • 没有找到相关文章

最新更新