Php 使用Web应用程序从匹配的订单项目元值中显示所选的BACS帐户

Php 使用Web应用程序从匹配的订单项目元值中显示所选的BACS帐户,php,wordpress,woocommerce,hook-woocommerce,payment-method,Php,Wordpress,Woocommerce,Hook Woocommerce,Payment Method,根据我的一个问题的“”回答代码,我更改了Woocommerce核心文件“class wc gateway bacs.php”,以便选择显示在Thankyu页面上的正确银行帐户,该帐户与所购买产品的变体属性相匹配 我已经在第255行之后的“class wc gateway bacs.php”中添加了下一个代码: foreach ( $order->get_items() as $item ) {$sede = $item->get_meta("pa_sede");}; if ( $ba

根据我的一个问题的“”回答代码,我更改了Woocommerce核心文件“class wc gateway bacs.php”,以便选择显示在Thankyu页面上的正确银行帐户,该帐户与所购买产品的变体属性相匹配

我已经在第255行之后的“class wc gateway bacs.php”中添加了下一个代码:

foreach ( $order->get_items() as $item ) {$sede = $item->get_meta("pa_sede");};
if ( $bacs_account->sort_code != $sede ) { continue; };
因此,
bank\u details()
函数中修改的代码部分的结果如下:

            foreach ( $bacs_accounts as $bacs_account ) {
                $bacs_account = (object) $bacs_account;

                foreach ( $order->get_items() as $item ) {$sede = $item->get_meta("pa_sede");};
                if ( $bacs_account->sort_code != $sede ) { continue; };

                if ( $bacs_account->account_name ) {
                    $account_html .= '<h3 class="wc-bacs-bank-details-account-name">' . wp_kses_post( wp_unslash( $bacs_account->account_name ) ) . ':</h3>' . PHP_EOL;
                }
                $account_html .= '<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(
                        'bank_name'      => array(
                            'label' => __( 'Bank', 'woocommerce' ),
                            'value' => $bacs_account->bank_name,
                        ),
                        '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'] ) ) {
                        $account_html .= '<li class="' . esc_attr( $field_key ) . '">' . wp_kses_post( $field['label'] ) . ': <strong>' . wp_kses_post( wptexturize( $field['value'] ) ) . '</strong></li>' . PHP_EOL;
                        $has_details   = true;
                    }
                }
                $account_html .= '</ul>';
            }
foreach($bacs_账户作为$bacs_账户){
$bacs_账户=(对象)$bacs_账户;
foreach($order->get_items()as$item){$sede=$item->get_meta(“pa_sede”);};
如果($bacs_账户->排序代码!=$sede){continue;};
如果($bacs\U账户->账户名称){
$account\u html.=''.wp\u kses\u post(wp\u unslash($bacs\u account->account\u name))。:'.PHP\u EOL;
}
$account\u html.='
    '.PHP\u EOL; //感谢页面和电子邮件中显示的BACS帐户字段。 $account\u fields=应用过滤器( “woocommerce\u bacs\u account\u fields”, 排列( “银行名称”=>数组( 'label'=>uuu('Bank','woocommerce'), “值”=>bacs\U账户->银行\U名称, ), “帐号”=>数组( 'label'=>\('Account number','woocommerce'), “值”=>bacs\U账户->账户编号, ), 'sort_code'=>数组( “标签”=>$sortcode, “值”=>$bacs\U账户->排序\U代码, ), “iban”=>数组( 'label'=>\('IBAN','woocommerce'), “值”=>bacs_账户->iban, ), “bic”=>数组( 'label'=>uuu('BIC','woocommerce'), “值”=>$bacs\U账户->bic, ), ), $order\u id ); foreach($field\u key=>$field的帐户字段){ 如果(!空($field['value'])){ $account\u html.='
  • '.wp\u kses\u post($field['label'])。:'.wp\u kses\u post(wpthrometrize($field['value'])。
  • '.PHP\EOL; $has_details=true; } } $account_html.='
'; }
但是,这不是一个好的实践,我希望在中使用钩住的函数,而不是使用class-wc-gateway-bacs.php


任何帮助都将不胜感激。

以下挂钩函数将避免覆盖Woocommerce
class wc gateway bacs.php
核心文件,使用订单项目中的特定变体属性值在Woocommerce订单接收页面中显示匹配的银行帐户(谢谢):


代码进入活动子主题(或活动主题)的function.php文件。测试和工作(它应该与您的产品属性一起工作,用于变体
pa\u sede
)。

工作很好。谢谢!。还有一件事,可以隐藏排序代码列吗?@Roasty我不知道。。。尝试在核心代码文件中演示如何或在何处执行此操作,并提出一个新问题。那就在这里通知我,亲爱的洛伊克。我没有问新的问题,而是编辑了这个问题,因为隐藏排序代码列应该是我提出的同一个问题的一部分。@在StackOverFlow中不允许同时问多个问题,甚至不允许编辑您的问题。所以请回过头来,用新的思路问一个新问题。
add_filter( 'woocommerce_bacs_accounts', 'filter_woocommerce_bacs_accounts_callback', 10, 1 );
function filter_woocommerce_bacs_accounts_callback( $bacs_accounts ){
    if ( empty($bacs_accounts) ) {
        return $bacs_accounts; // Exit
    }

    if( is_wc_endpoint_url('order-received') ) {
        $endpoint = 'order-received';
    } elseif( is_wc_endpoint_url('view-order') ) {
        $endpoint = 'view-order';
    } else {
        return $bacs_accounts; // Exit
    }

    // Get the WC_Order Object
    $order = wc_get_order( get_query_var($endpoint) );

    $sort_codes = []; // Initializing variable array

    // Loop through order items
    foreach ( $order->get_items() as $item ) {
        $sort_codes[] = $item->get_meta("pa_sede");
    }

    if ( empty($sort_codes) ) {
        return $bacs_accounts; // Exit
    }

    // Loop through Bacs accounts
    foreach ( $bacs_accounts as $key => $bacs_account ) {
        $bacs_account = (object) $bacs_account;

        // Remove the non matching bank accounts
        if ( ! in_array($bacs_account->sort_code, $sort_codes ) ) {
            unset($bacs_accounts[$key]);
        }
    }
    return $bacs_accounts;
}