У меня небольшая проблема, я изменяю структуру вкладок в Моем аккаунте в WooCommerce и хочу связать «Адреса» с «Реквизитами аккаунта», и проблема возникает с «Адреса», когда я пытаюсь напечатать поля этого адреса. Появляется вкладка в «Сведения о счете»:
Warning: Invalid argument supplied for foreach () in C: \ xampp \ htdocs \ wp-content \ plugins \ woocommerce \ templates \ myaccount \ form-edit-address.php on line 34
А это код ошибки:
<?php
foreach ($address as $key => $field) { // **line 34**
woocommerce_form_field ($key, $field, wc_get_post_data_by_key ($key, $field ['value']));
}
?>
Сделайте var_dump, где он выбрасывает NULL. Видя все это, я попытался изменить функцию в class-wc-shortcode-my-account.php, где я не достигаю своей цели. Я думал, что есть некоторое ограничение, так что массив доступен только в этом шаблоне; Я не знаю, прав ли я и что я нашел в wc-template-functions.php:
function woocommerce_account_edit_address( $type ) {
$type = wc_edit_address_i18n( sanitize_title( $type ), true );
WC_Shortcode_My_Account::edit_address( $type );
}
}
Как мне распечатать массив $ address на пользовательской вкладке? Спасибо!
ОБНОВЛЕНИЕ:
Одна из моих попыток - включить файл form-edit-address.php в form-edit-account.php
<?php
include("form-edit-address.php");
?>
Другой попыткой было скопировать содержимое файла form-edit-address.php в form-edit-account. Также попробуйте разместить глобальные переменные $ address и $ load-address без какого-либо эффекта:
public static function edit_address( $load_address = 'billing' ) {
$current_user = wp_get_current_user();
global $load_address;
$load_address = sanitize_key( $load_address );
$country = get_user_meta( get_current_user_id(), $load_address . '_country', true );
if ( ! $country ) {
$country = WC()->countries->get_base_country();
}
if ( 'billing' === $load_address ) {
$allowed_countries = WC()->countries->get_allowed_countries();
if ( ! array_key_exists( $country, $allowed_countries ) ) {
$country = current( array_keys( $allowed_countries ) );
}
}
if ( 'shipping' === $load_address ) {
$allowed_countries = WC()->countries->get_shipping_countries();
if ( ! array_key_exists( $country, $allowed_countries ) ) {
$country = current( array_keys( $allowed_countries ) );
}
}
global $address;
$address = WC()->countries->get_address_fields( $country, $load_address . '_' );
// Enqueue scripts.
wp_enqueue_script( 'wc-country-select' );
wp_enqueue_script( 'wc-address-i18n' );
// 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;
}
}
$address[ $key ]['value'] = apply_filters( 'woocommerce_my_account_edit_address_field_value', $value, $key, $load_address );
}
wc_get_template(
'myaccount/form-edit-address.php',
array(
'load_address' => $load_address,
'address' => apply_filters( 'woocommerce_address_to_edit', $address, $load_address ),
)
);
}