Выберите учетную запись BACS, чтобы отобразить ее на странице WooCommerce. - PullRequest
1 голос
/ 07 марта 2019

У меня есть магазин WooCommerce, в котором один продукт может быть персонализирован несколькими художниками.У каждого художника есть свой банковский счет для получения оплаты;поэтому мне нужен банковский счет, который отображается на странице спасибо, и в соответствующем письме будет принадлежать выбранному исполнителю.Чтобы идентифицировать каждый банковский счет и исполнителя, я сделал следующее:

  1. Я назначил 3-символьный идентификатор, используя слаг для каждого варианта продукта (исполнителя).
  2. Я также назначил то же самое3-х символьный идентификатор, использующий поле кода сортировки для каждого банковского счета в платежном шлюзе.

Теперь мне нужно найти, какой банковский счет имеет код сортировки, равный выбранному варианту слаг account_details[x]['sort_code'] = (the variation slug)

Может ли кто-нибудь указать мне правильное направление?Мне нужен цикл, который отключает все строки в account_details, за исключением той, которая соответствует слаг вариации.


Я нашел способ выбрать банковский счет, сравнив его со строкой.Для этого я добавил условие if ( $bacs_account->sort_code != 'ztc' ) { continue; } в строку 255 файла class-wc-gateway-bacs.php

    foreach ( $bacs_accounts as $bacs_account ) {
        $bacs_account = (object) $bacs_account; if ( $bacs_account->sort_code != 'ztc' ) { 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;

Однако я не могу найти способ получения вариационной единицы для ее сравнения.до $bacs_account->sort_code (вместо строки).Кроме того, я думаю, что было бы лучше, чтобы это было изменено файлом functions.php вместо того, чтобы связываться с файлом class-wc-gateway-bacs.php.

Может кто-нибудь помочь мне в том, чтобы сделать любойэтого?

Ответы [ 2 ]

1 голос
/ 14 марта 2019

Готово!

Нашел способ получить слаг вариации из https://stackoverflow.com/questions/53009224/get-order-item-meta-data-in-an-unprotected-array-in-woocommerce-3. Поэтому я просто добавил:

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

после строки 255 в файле "class-wc-gateway-bacs.php". Я также прокомментировал строки 272-275, чтобы скрыть поле кода сортировки, поскольку оно полезно для выбора учетной записи, но не имеет смысла для пользователя.

            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>';
            }

Все работает так, как ожидалось.

0 голосов
/ 07 марта 2019

Я работал в аналогичной ситуации, но я включил шлюзы на странице оформления заказа.Шлюзы меняются после каждого заказа циклически.Предположим, в первом порядке используется шлюз 1, во втором - шлюз 2, в третьем шлюзе 3 снова 4 - шлюз 1. Я использовал CSS, чтобы скрывать / отображать только один шлюз за раз на основе шлюза, использованного в предыдущем порядке.

function filter_gateways($gateways){
  global $woocommerce;
  //$WC_Payment_Gateway = wc_get_payment_gateway_by_order( $order );
  $latest_order_id = get_last_order_id(); //Get latest used gateway.
  $order_method = get_post_meta( $latest_order_id, '_payment_method', true );
//Disable /hide gateways based on last order.
    if ($order_method == 'nmi_gateway_woocommerce_credit_card_cloneC') {?>
    <style type="text/css">
    li.payment_method_nmi_gateway_woocommerce_credit_card_cloneC{display: none !important;}
    li.payment_method_nmi_gateway_woocommerce_credit_card_cloneF{display: none !important;}
    li.payment_method_nmi_gateway_woocommerce_credit_card_cloneK{display: none !important;}
    </style>
    <?php

    } elseif ($order_method == 'nmi_gateway_woocommerce_credit_card_cloneE') {?>
    <style type="text/css">
    li.payment_method_nmi_gateway_woocommerce_credit_card_cloneC{display: none !important;}
    li.payment_method_nmi_gateway_woocommerce_credit_card_cloneE{display: none !important;}
    li.payment_method_nmi_gateway_woocommerce_credit_card_cloneK{display: none !important;}
    </style>

    <?php


    } elseif ($order_method == 'nmi_gateway_woocommerce_credit_card_cloneF') {?>
    <style type="text/css">
    li.payment_method_nmi_gateway_woocommerce_credit_card_cloneC{display: none !important;}
    li.payment_method_nmi_gateway_woocommerce_credit_card_cloneE{display: none !important;}
    li.payment_method_nmi_gateway_woocommerce_credit_card_cloneF{display: none !important;}
    </style>



    return $gateways;
}

add_filter('woocommerce_available_payment_gateways','filter_gateways');

Итак, в вашем случае получите URL-адрес слагов и на основе этого должны быть соблюдены некоторые правила стилевого оформления, которые должны отображаться в BACS при использовании которых вы можете отключить другие шлюзы.

Чтобы получить слаг, если у вас нет: 1Сначала получите идентификатор продукта из идентификатора заказа.2. Затем вы можете получить слаг с помощью идентификатора продукта ( Woocommerce: как мне получить слаг продукта с идентификатором? )

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...