Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在插件中扩展支付网关_Php_Wordpress_Woocommerce_Extending Classes_Wordpress Plugin Creation - Fatal编程技术网

Php 在插件中扩展支付网关

Php 在插件中扩展支付网关,php,wordpress,woocommerce,extending-classes,wordpress-plugin-creation,Php,Wordpress,Woocommerce,Extending Classes,Wordpress Plugin Creation,我想了解各种类在Wordpress中加载的顺序。 Wordpress中有许多插件可用,那么谁将比谁更早加载 考虑一下,我想开发一个插件,它将使用一些现有的Woocommerce类。基本上,我的自定义插件将扩展Woocommerce的某些类别(例如:WC\u Gateway\u COD) 如何确保现有类“WC\u Gateway\u COD”在执行以下语句之前已定义并加载 if (class_exists('WC_Gateway_COD')) { class WC_my_custom_c

我想了解各种类在Wordpress中加载的顺序。 Wordpress中有许多插件可用,那么谁将比谁更早加载

考虑一下,我想开发一个插件,它将使用一些现有的Woocommerce类。基本上,我的自定义插件将扩展Woocommerce的某些类别(例如:WC\u Gateway\u COD)

如何确保现有类“WC\u Gateway\u COD”在执行以下语句之前已定义并加载

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

要基于现有的WooCommerce支付方式(如COD)创建自定义网关,建议在插件中添加(根据您的需要调整代码),如:

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