将可编辑的地址字段添加到WooCommerce发票页面

时间:2019-09-09 15:10:24

标签: woocommerce hook-woocommerce custom-wordpress-pages

请原谅这样一个基本的问题。我是WooCommerce主题开发的新手,并且真正地尝试了解wordpress如何处理客户数据,因此我可以学习如何操作它。如果这个问题仍然太笼统,(我的上一个问题由于这个原因而被关闭),我什至会欢迎几个链接,这些链接可以帮助我指出正确的方向并解释我要关注的领域。

我要做的是将可编辑的地址字段添加到客户通过电子邮件向他们发送发票时看到的页面。 (form-pay.php)

最初,我尝试对function.php中的每个字段使用以下代码的变体来手动添加字段,然后从order-pay.php调用它:

<p class="form-row form-row-first">
<label for="billing_first_name"><?php _e( 'First name', 'woocommerce' ); ?><span class="required">*</span></label>
<input type="text" class="input-text" name="billing_first_name" id="billing_first_name" value="<?php if ( ! empty( $_POST['billing_first_name'] ) ) esc_attr_e( $_POST['billing_first_name'] ); ?>" />
</p>

但是,当我这样做时,它会添加与我自己的WordPress登录名关联的地址详细信息,而不是与发票关联的客户地址。

我研究了woocommerce codex的钩子和过滤器,还找到了this问题的答案,该问题允许添加正确的地址字段。

这是我的问题似乎与我发现的许多解决方案不同的地方,因为大多数解决方案都是用于更新当前购物车或已登录用户的帐单和送货地址,而不是与特定商品相关联的地址。发票。

这是我添加到form-pay.php中的字段。

<h2 class="woocommerce-column__title"><?php esc_html_e( 'Billing address', 'woocommerce' ); ?></h2>
<address>
    <?php echo wp_kses_post( $order->get_formatted_billing_address( __( 'N/A', 'woocommerce' ) ) ); ?>
    <?php if ( $order->get_billing_phone() ) : ?>
        <p class="woocommerce-customer-details--phone"><?php echo esc_html( $order->get_billing_phone() ); ?></p>
    <?php endif; ?>
    <?php if ( $order->get_billing_email() ) : ?>
        <p class="woocommerce-customer-details--email"><?php echo esc_html( $order->get_billing_email() ); ?></p>
    <?php endif; ?>
</address>

<h2 class="woocommerce-column__title"><?php esc_html_e( 'Shipping address', 'woocommerce' ); ?></h2>
<address>
    <?php echo wp_kses_post( $order->get_formatted_shipping_address( __( 'N/A', 'woocommerce' ) ) ); ?>
</address>

<!-- Form -->
<h3><?php _e( 'Billing details', 'woocommerce' ); ?></h3>
<?php do_action( 'woocommerce_before_checkout_billing_form', $order ); ?>
<div class="woocommerce-billing-fields__field-wrapper">
    <?php
    $fields = WC()->checkout->get_checkout_fields( 'billing' );
    foreach ( $fields as $key => $field ) {
        $field_name = $key;

        if ( is_callable( array( $order, 'get_' . $field_name ) ) ) {
            $field['value'] = $order->{"get_$field_name"}( 'edit' );
        } else {
            $field['value'] = $order->get_meta( '_' . $field_name );
        }   
        woocommerce_form_field( $key, $field, $field['value'] );
    }
    ?>
</div>
<?php do_action( 'woocommerce_after_checkout_billing_form', $order ); ?>

<h3><?php _e( 'Shipping details', 'woocommerce' ); ?></h3>
<?php do_action( 'woocommerce_before_checkout_shipping_form', $order ); ?>
<div class="woocommerce-shipping-fields__field-wrapper">
    <?php
    $fields = WC()->checkout->get_checkout_fields( 'shipping' );
    foreach ( $fields as $key => $field ) {
        $field_name = $key;

        if ( is_callable( array( $order, 'get_' . $field_name ) ) ) {
            $field['value'] = $order->{"get_$field_name"}( 'edit' );
        } else {
            $field['value'] = $order->get_meta( '_' . $field_name );
        }   
        woocommerce_form_field( $key, $field, $field['value'] );
    }
    ?>
</div>
<?php do_action( 'woocommerce_after_checkout_shipping_form', $order ); ?>

这些字段现在正确显示在发票页面上,其中显示了我已经添加到发票中的所有地址详细信息。我只需要了解需要在按钮上附加什么逻辑即可告诉WooCommerce更新记录。

正如我所说,我认识到这是一个基本的基本问题,但是到目前为止,我还没有找到一种解释,该解释特别适用于更新发票而不是购物车的情况。

0 个答案:

没有答案