Функция переопределения в файле woocommerce.php в папке «inc» темы - PullRequest
3 голосов
/ 09 марта 2019

Я пытался найти ответ, но застрял.Извините, я вообще не знаю php.

В моей теме / inc / functions / папке есть файл woocommerce.php

Вот ссылка на полный код

Iхочу заменить эту часть кода (от строк 1067 до 1080)

add_filter( 'woocommerce_registration_errors', 'registration_errors_validation', 10, 3 );

function registration_errors_validation( $reg_errors, $sanitized_user_login, $user_email ) {
global $porto_settings, $woocommerce;
if ( isset( $porto_settings['reg-form-info'] ) && 'full' == $porto_settings['reg-form-info'] && 'no' === get_option( 'woocommerce_registration_generate_password' ) ) {
    extract( $_POST );
    if ( strcmp( $password, $confirm_password ) !== 0 ) {
        return new WP_Error( 'registration-error', __( 'Passwords do not match.', 'porto' ) );
    }
    return $reg_errors;
}
return $reg_errors;
}

На эту:

add_filter('woocommerce_registration_errors', 'registration_errors_validation', 10,3);

function registration_errors_validation($reg_errors, $sanitized_user_login, $user_email) {
global $porto_settings, $woocommerce;
if( isset( $porto_settings['reg-form-info'] ) && $porto_settings['reg-form-info'] == 'full' && 'no' === get_option( 'woocommerce_registration_generate_password' ) ){
    extract( $_POST );
    if ( strcmp( $posted['account_password'], $posted['account_confirm_password'] ) !== 0 ) {
        return new WP_Error( 'registration-error', __( 'Passwords do not match.', 'porto' ) );
    }
    return $reg_errors;
}
return $reg_errors;
}

Я попытался вставить измененный код в файл functions.php темы, ноЯ получаю фатальную ошибку, сообщающую, что не могу переопределить функцию registration_errors_validation.Я также создал дочернюю тему с подпапками inc/functions/ и скопировал туда измененный файл woocommerce.php.Наконец, я также скопировал файл woocommerce.php в дочернюю корневую папку.Ничего не помогло.

Я прочитал кое-что о добавлении if (! Function_exists ()) в начале, но я не мог решить это сам.

Вы можете мне помочь?

1 Ответ

3 голосов
/ 09 марта 2019

Поскольку это ловушка фильтра, использование вашего кода в переименованной функции с крюком с более высоким приоритетом должно заменить отфильтрованные данные тем Porto… Попробуйте это:

add_filter( 'woocommerce_registration_errors', 'custom_registration_errors_validation', 20, 3 );
function custom_registration_errors_validation( $reg_errors, $sanitized_user_login, $user_email ) {
    global $porto_settings;

    if ( isset( $porto_settings['reg-form-info'] ) && 'full' == $porto_settings['reg-form-info'] && 'no' === get_option( 'woocommerce_registration_generate_password' ) ) {
        extract( $_POST );
        if ( strcmp( $posted['account_password'], $posted['account_confirm_password'] ) !== 0 ) {
            return new WP_Error( 'registration-error', __( 'Passwords do not match.', 'porto' ) );
        }
    }
    return $reg_errors;
}

Код помещается в файл function.phpваша активная детская тема (или активная тема).Это должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...