您好我正在尝试修改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
附带了所需的所有信息。
如何获取生成填充表单所需的所有数据?
谢谢!
答案 0 :(得分:1)
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' );
对我而言,我只是想简化结帐流程,所以我不需要它们,因为我正在创建自定义购物车/结帐系统。