Forms form-edit-address.php文件中变量$address的数据来自何处?

Forms form-edit-address.php文件中变量$address的数据来自何处?,forms,variables,woocommerce,Forms,Variables,Woocommerce,您好,我正在尝试编辑my account.php,我正在使用wc\u get\u template()调用表单edit address.php,如下所示: 但我得到了一个错误: 注意:未定义变量:第42行…/woocommerce/myaccount/form-edit-address.php中的地址 我试图通过添加以下行来解决此问题: $address=WC()->国家->获取地址字段() 转到表单edit address.php文件 但是这不起作用,因为这个$address变量没有的“值

您好,我正在尝试编辑
my account.php
,我正在使用
wc\u get\u template()
调用
表单edit address.php
,如下所示:

但我得到了一个错误:

注意:未定义变量:第42行…/woocommerce/myaccount/form-edit-address.php中的地址

我试图通过添加以下行来解决此问题:

$address=WC()->国家->获取地址字段()

转到
表单edit address.php
文件

但是这不起作用,因为这个
$address
变量没有
的“值”
只是字段的名称

当我直接使用这个URL访问
表单edit address.php
时:变量
$address
包含所有需要的信息

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


谢谢

表单编辑地址。访问端点url“编辑地址”时调用php

i、 e“www.example.com/my account/edit address/”。哪个端点url文件继承从父页面url(即“我的帐户”)传递的数据。 因此,如果您正在调用端点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 );
这个数组在“formeditdress.php”中使用

如果您调用“formeditaddress.php”作为模板文件,请尝试在foreach循环之前添加上述代码


希望这有帮助。

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

$address
变量是在
class wc shortcode my account.php中设置的,数组的正确格式都在这里完成

在函数
edit_address
第158行中

$load\u address
只是一个变量,根据要加载的地址设置为“billing”或“shipping”

下面是我如何输出编辑账单地址表单的:

$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' );

对我来说,我只是想简化我的结帐流程,所以在创建自定义购物车/结帐系统时不需要它们。

我认为这个变量
$address
是不同的。文件
my address.php
中的
$address
不是用来生成表单的,只是为了打印信息,我使用
print\r($address)
来检查数据结构,但不相同。请确保它不是用来生成表单的,只是用来打印信息。但相同的信息会传递给编辑表单以加载。上述代码中的
$name
变量(在
my address.php
上)决定它是“账单”还是“发货”。在上述代码中,尝试使用
$load\u address
更改变量
$name
。我认为这应该可以解决问题。将
$name
更改为
$load\u address
只会得到不同的数据、发货或账单,但数据结构将是相同的,不能与原始的
表单edit address.php
文件一起使用。当我访问端点时,是否可以复制相同的
$address
变量available?