6

「ローカルピックアップ」が選択されている場合、顧客の処理中の電子メールで「配送先住所」情報セクションを非表示にするにはどうすればよいですか?

このためのコードを提供する方法がわかりません。

ここに画像の説明を入力

4

1 に答える 1

6

はい、可能 です (このページの下部にある更新を参照してください)

WooCommerce テンプレートのオーバーライド (WooCommerce プラグインtemplatesフォルダーをアクティブな子テーマまたはテーマにコピーし、名前を変更しますwoocommerce)。
そのためには、まず関連ドキュメントを必ずお読み ください。

上記が正しく完了したらwoocommerce、アクティブな子テーマまたはテーマ内のそのフォルダーにある 2 つのテンプレートを編集する必要があります。ファイルは次の場所にあります。

  1. emails (sub folder)>email-addresses.php (php file).

    このテンプレートのコードを19 行目から置き換えます。
if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

?><table id="addresses" cellspacing="0" cellpadding="0" style="width: 100%; vertical-align: top;" border="0">
    <tr>
        <td class="td" style="text-align:left; font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif;" valign="top" width="50%">
            <h3><?php _e( 'Billing address', 'woocommerce' ); ?></h3>

            <p class="text"><?php echo $order->get_formatted_billing_address(); ?></p>
        </td>
        <?php // ======================> Here begins the customization

            $shipping_local_pickup = false;
            if ( $items_totals = $order->get_order_item_totals() ) {
                foreach ( $items_totals as $items_total ) {
                    if ( $items_total['value'] == 'Local Pickup' && !$shipping_local_pickup ) $shipping_local_pickup = true;
                }
            }
            // End

            if ( ! wc_ship_to_billing_address_only() && $order->needs_shipping_address() && ( $shipping = $order->get_formatted_shipping_address() ) && !$shipping_local_pickup ) : ?>
            <td class="td" style="text-align:left; font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif;" valign="top" width="50%">
                <h3><?php _e( 'Shipping address', 'woocommerce' ); ?></h3>

                <p class="text"><?php echo $shipping; ?></p>
            </td>
        <?php endif; ?>
    </tr>
</table>
  1. emails (sub folder)>plain (sub folder)>email-addresses.php (php file).

    このテンプレートのコードを19 行目から置き換えます。
if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

echo "\n" . strtoupper( __( 'Billing address', 'woocommerce' ) ) . "\n\n";
echo preg_replace( '#<br\s*/?>#i', "\n", $order->get_formatted_billing_address() ) . "\n";

 // ======================> Here begins the customization

$shipping_local_pickup = false;
if ( $items_totals = $order->get_order_item_totals() ) {
    foreach ( $items_totals as $items_total ) {
        if ( $items_total['value'] == 'Local Pickup' && !$shipping_local_pickup ) $shipping_local_pickup = true;
    }
} // End

if ( ! wc_ship_to_billing_address_only() && $order->needs_shipping_address() && ( $shipping = $order->get_formatted_shipping_address() ) && !$shipping_local_pickup ) {
    echo "\n" . strtoupper( __( 'Shipping address', 'woocommerce' ) ) . "\n\n";
    echo preg_replace( '#<br\s*/?>#i', "\n", $shipping ) . "\n";
}

注文でローカル ピックアップが使用されていることを検出するために、これを追加しました。

$shipping_local_pickup = false;
if ( $items_totals = $order->get_order_item_totals() ) {
    foreach ( $items_totals as $items_total ) {
        if ( $items_total['value'] == 'Local Pickup' && !$shipping_local_pickup ) $shipping_local_pickup = true;
    }
}

そして、これは既存のifステートメントで、配送先住所の表示を停止します (ローカル ピックアップの場合):

&& !$shipping_local_pickup

更新: ** WC_Abstract_Order クラス - ** メソッドをこのように使用して、はるかにコンパクトなコードを使用することが可能です:has_shipping_method()

$shipping_local_pickup = false;
if ( $order->has_shipping_method( 'local_pickup' ) )
    $shipping_local_pickup = true;

そして、これは既存のifステートメントで、配送先住所の表示を停止します (ローカル ピックアップの場合):

&& !$shipping_local_pickup

参考文献:

于 2016-08-13T21:20:49.777 に答える