form-edit-address.php文件中来自变量$ address的数据来自哪里?

时间:2016-04-06 22:55:34

标签: forms variables woocommerce

您好我正在尝试修改my-account.php,我正在使用form-edit-address.php调用wc_get_template(),如下所示:

<?php wc_get_template( 'myaccount/form-edit-address.php' ); ?>

但是我收到了这个错误:

Notice: Undefined variable: address in .../woocommerce/myaccount/form-edit-address.php on line 42

我尝试修复添加此行:

$address = WC()->countries->get_address_fields();

form-edit-address.php文件。

但这不起作用,因为此$address变量没有'value'字段的名称。

当我使用以下网址直接访问form-edit-address.php时:http://192.168.1.15/e-commerce/my-account/edit-address/billing/变量$address附带了所需的所有信息。

如何获取生成填充表单所需的所有数据?

谢谢!

2 个答案:

答案 0 :(得分:1)

在访问端点网址“edit-address”时会调用

form-edit-address.php 即“www.example.com/my-account/edit-address/”。哪个端点url文件继承从父页面url传递的数据,即“my-account”。 因此,如果您正在调用端点url文件,它将无法工作。

顺便说一句,如果您检查my-address.php$address变量是在第49行定义的。

$address = apply_filters( 'woocommerce_my_account_my_address_formatted_address', array(
                    'first_name'  => get_user_meta( $customer_id, $name . '_first_name', true ),
                    'last_name'   => get_user_meta( $customer_id, $name . '_last_name', true ),
                    'company'     => get_user_meta( $customer_id, $name . '_company', true ),
                    'address_1'   => get_user_meta( $customer_id, $name . '_address_1', true ),
                    'address_2'   => get_user_meta( $customer_id, $name . '_address_2', true ),
                    'city'        => get_user_meta( $customer_id, $name . '_city', true ),
                    'state'       => get_user_meta( $customer_id, $name . '_state', true ),
                    'postcode'    => get_user_meta( $customer_id, $name . '_postcode', true ),
                    'country'     => get_user_meta( $customer_id, $name . '_country', true )
                ), $customer_id, $name );

此数组用于“form-edit-address.php”。

如果您将“form-edit-address.php”作为模板文件调用,请尝试在其中的foreach循环之前添加上面的代码。

希望这有帮助。

答案 1 :(得分:1)

我知道这篇文章已经有2年了,但我今天也在寻找同样的东西。因为这在谷歌首次出现,当我用谷歌搜索它。现在答案已经改变了。

$address var在class-wc-shortcode-my-account.php中设置,并且准备数组格式正确就完成了。

在函数edit_address第158行中。

$load_address只是一个设置为&#39;结算&#39;或者&#39;运输&#39;取决于您要加载的地址。

以下是我设法输出编辑帐单邮寄地址的方式:

$load_address = sanitize_key( 'billing' );

$address = WC()->countries->get_address_fields( get_user_meta( get_current_user_id(), $load_address . '_country', true ), $load_address . '_' );

    // Prepare values
    foreach ( $address as $key => $field ) {

      $value = get_user_meta( get_current_user_id(), $key, true );

      if ( ! $value ) {
        switch ( $key ) {
          case 'billing_email' :
          case 'shipping_email' :
            $value = $current_user->user_email;
            break;
          case 'billing_country' :
          case 'shipping_country' :
            $value = WC()->countries->get_base_country();
            break;
          case 'billing_state' :
          case 'shipping_state' :
            $value = WC()->countries->get_base_state();
            break;
        }
      }

      $address[ $key ]['value'] = apply_filters( 'woocommerce_my_account_edit_address_field_value', $value, $key, $load_address );
    }

    //Output code from form-edit-address.php
    foreach ( $address as $key => $field ) {
        if ( isset( $field['country_field'], $address[ $field['country_field'] ] ) ) {
            $field['country'] = wc_get_post_data_by_key( $field['country_field'], $address[ $field['country_field'] ]['value'] );
        }
        woocommerce_form_field( $key, $field, wc_get_post_data_by_key( $key, $field['value'] ) );
    }

希望这可以帮助其他人寻找相同的信息。

如果您希望将表单放在非WC页面上,则需要将国家/地区列入队列并填写脚本。

// Enqueue scripts
wp_enqueue_script( 'wc-country-select' );
wp_enqueue_script( 'wc-address-i18n' );

对我而言,我只是想简化结帐流程,所以我不需要它们,因为我正在创建自定义购物车/结帐系统。