Woocommerce BACS支付网关帐户详细信息修改

时间:2016-07-04 11:55:15

标签: php wordpress woocommerce

我想知道是否可以像woocommerce/includes/bacs/class-wc-gateway-bacs.php中的模板文件一样更改mytheme/includes/bacs/class-wc-gateway-bacs.php?目前我更改了插件核心中的代码,但更新后它将再次更改。

或许有人知道如何在function.php文件中使用钩子或类似的东西来做?

我需要更改此功能:

/**
 * Get bank details and place into a list format.
 *
 * @param int $order_id
 */
private function bank_details( $order_id = '' ) {

    if ( empty( $this->account_details ) ) {
        return;
    }

    // Get order and store in $order
    $order      = wc_get_order( $order_id );

    // Get the order country and country $locale
    $country    = $order->billing_country;
    $locale     = $this->get_country_locale();

    // Get sortcode label in the $locale array and use appropriate one
    $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort Code', 'woocommerce' );

    $bacs_accounts = apply_filters( 'woocommerce_bacs_accounts', $this->account_details );

    if ( ! empty( $bacs_accounts ) ) {
        echo '<h2 class="wc-bacs-bank-details-heading">' . __( 'Our Bank Details', 'woocommerce' ) . '</h2>' . PHP_EOL;

        foreach ( $bacs_accounts as $bacs_account ) {

            $bacs_account = (object) $bacs_account;

            if ( $bacs_account->account_name || $bacs_account->bank_name ) {
                echo '<h3>' . wp_unslash( implode( ' - ', array_filter( array( $bacs_account->account_name, $bacs_account->bank_name ) ) ) ) . '</h3>' . PHP_EOL;
            }

            echo '<ul class="wc-bacs-bank-details order_details bacs_details">' . PHP_EOL;

            // BACS account fields shown on the thanks page and in emails
            $account_fields = apply_filters( 'woocommerce_bacs_account_fields', array(
                'account_number'=> array(
                    'label' => __( 'Account Number', 'woocommerce' ),
                    'value' => $bacs_account->account_number
                ),
                'sort_code'     => array(
                    'label' => $sortcode,
                    'value' => $bacs_account->sort_code
                ),
                'iban'          => array(
                    'label' => __( 'IBAN', 'woocommerce' ),
                    'value' => $bacs_account->iban
                ),
                'bic'           => array(
                    'label' => __( 'BIC', 'woocommerce' ),
                    'value' => $bacs_account->bic
                )
            ), $order_id );

            foreach ( $account_fields as $field_key => $field ) {
                if ( ! empty( $field['value'] ) ) {
                    echo '<li class="' . esc_attr( $field_key ) . '">' . esc_attr( $field['label'] ) . ': <strong>' . wptexturize( $field['value'] ) . '</strong></li>' . PHP_EOL;
                }
            }

            echo '</ul>';
        }
    }

}

我真的需要帮助,谢谢你提前:)

1 个答案:

答案 0 :(得分:3)

问题已解决:

我刚刚创建了额外的文件filename.php,插入了hook +默认woocommerce/includes/bacs/class-wc-gateway-bacs.php代码,将$this->id = 'bacs';更改为$this->id = 'YOUR ID NAME';并使用&#34;更改了所有变量bacs&#34;到&#34; YOUR ID NAME&#34;。这个文件进入plugins文件夹并在wordpress :)中激活它。

Full code example fiddle(sorry for jsfiddle)

<?php
/*
Plugin Name: Custom Payment Gateway
Description: Custom payment gateway 
Author: Baivaras
*/

if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly
}

/**
 * Custom Payment Gateway.
 *
 * Provides a Custom Payment Gateway, mainly for testing purposes.
 */
add_action('plugins_loaded', 'init_custom_gateway_class');
function init_custom_gateway_class(){

    class WC_Gateway_Custom extends WC_Payment_Gateway {

        public $domain;

        /* class-wc-gateway-bacs.php from public function __construct CODE GOES HERE */
    }
}

add_filter( 'woocommerce_payment_gateways', 'add_custom_gateway_class' );
function add_custom_gateway_class( $methods ) {
    $methods[] = 'WC_Gateway_Custom';
    return $methods;
}

如果出现问题,请抱歉我的英语:)