Я попытался заменить имя пользователя на биллинг по имени, используя приведенный ниже код изменено из этой ветки ответов, но продолжает получать ошибку 500.

Если я использую имя и фамилию, это работает, но я бы предпочел использовать только имя.

Код выглядит следующим образом:

add_filter( 'woocommerce_new_customer_data', 'custom_new_customer_data', 10, 1 );
function custom_new_customer_data( $new_customer_data ){

    // Complete HERE in this array the wrong usernames you want to replace (coma separated strings)
    $wrong_user_names = array( 'info', 'contact' );

    // get the first billing name
    if(isset($_POST['billing_first_name'])) $first_name = $_POST['billing_first_name'];

    if( ( ! empty($first_name) ) ) && in_array( $new_customer_data['user_login'], $wrong_user_names ) ){

        // the customer billing complete name
        $first_name = $first_name;

        // Replacing 'user_login' in the user data array, before data is inserted
        $new_customer_data['user_login'] = sanitize_user( str_replace( $first_name ) );
    }
    return $new_customer_data;
}

Мой вопрос: как мне настроить WooCommerce для генерации имени пользователя с помощью настраиваемых полей: Имя (billing_first_name) вместо полного имени или имени пользователя?

3
JJwitton 17 Июн 2018 в 01:35

1 ответ

Лучший ответ

Попробуйте следующее, чтобы заменить имя пользователя на имя для выставления счета во время регистрации на кассе:

add_filter( 'woocommerce_new_customer_data', 'customer_username_based_on_firstname', 20, 1 );
function customer_username_based_on_firstname( $new_customer_data ){

    // Complete HERE in this array the wrong usernames you want to replace (coma separated strings)
    $wrong_user_names = array( 'info', 'contact' );

    // get the first billing name
    if(isset($_POST['billing_first_name'])) $first_name = $_POST['billing_first_name'];

    if( ! empty($first_name) && ! in_array( $_POST['billing_first_name'], $wrong_user_names ) ){

        // Replacing 'user_login' in the user data array, before data is inserted
        $new_customer_data['user_login'] = sanitize_user( $first_name );
    }
    return $new_customer_data;
}

Код находится в файле function.php вашей активной дочерней темы (или активной темы). Проверено и работает.

Ваша ошибка исходила от str_replace( $first_name ). Эта функция php требует 3 аргумента.

3
LoicTheAztec 16 Июн 2018 в 23:35