Есть ли способ обновить роль пользователя и обновить поля ACF в профиле пользователя в WordPress одновременно с помощью действий WooCommerce? - PullRequest
1 голос
/ 14 января 2020

Я пытался объединить следующие две функции, но могу успешно выполнять только одну или другую, но не обе одновременно. Мне было интересно, если бы кто-нибудь знал, что может быть причиной конфликта. Они выполняются при создании клиента с помощью WooCommerce регистрационной формы, с помощью действия woocommerce_created_customer.

Функция: 1 (цель - обновить два поля которые уже существуют на странице пользователя благодаря ACF Pro)

function school_info_save( $customer_id ) {

    if( isset( $_POST['school_name'] ) ) {
        update_user_meta( $customer_id, 'school_name', sanitize_text_field($_POST['school_name']) );
    }

    if( isset( $_POST['school_email'] ) ) {
        update_user_meta( $customer_id, 'school_email', sanitize_email($_POST['school_email']) );
    }

}
add_action('woocommerce_created_customer', 'school_info_save', 20);

Функция 2: (цель состоит в том, чтобы затем обновить роль пользователя до студента)

function update_to_student_role( $customer_id ) {

    if( isset( $_POST['school_name']) && isset( $_POST['school_email']) ) {
        wp_update_user( array( 'ID' => $customer_id, 'role' => 'student' ) );
    }

}
add_action('woocommerce_created_customer', 'update_to_student_role', 10);

Я пробовал оба в разных приоритетах. Как правило, если оба активны, только функция роли студента будет успешной. Просто интересно, может ли кто-нибудь объяснить мне, почему wp_update_user препятствует работе update_user_meta - если это действительно то, что происходит.

Кроме того, я также попытался запустить вышеупомянутую функциональность, все в одной функции, с тот же результат.

function school_info_save( $customer_id ) {

    $metas = array(
        'wp_capabilities' => array('student' => true),
        'school_name' => sanitize_text_field($_POST['school_name']),
        'school_email' => sanitize_email($_POST['school_email'])
    );

    if( isset( $_POST['school_name']) && isset( $_POST['school_email']) ) {
        foreach($metas as $key => $value) {
            update_user_meta( $customer_id, $key, $value );
        }
    }

}
add_action('woocommerce_created_customer', 'school_info_save', 20);

Спасибо.

Ответы [ 2 ]

0 голосов
/ 15 января 2020

Неважно ... Я забыл на самом деле изменить правила полей ACF так, чтобы эти два студенческих поля появились в профиле пользователя, который имел роль "ученика" ... функции работали, но поля не были там, чтобы получить данные при смене роли, я верю.

0 голосов
/ 14 января 2020

вместо этого вы можете изменить свою функцию 2. Например:

function update_to_student_role( $new_customer_data ) {

    if( isset( $_POST['school_name']) && isset( $_POST['school_email']) ) {
        $new_customer_data['role'] = 'student';
    }
    return $new_customer_data;
}
add_action('woocommerce_new_customer_data', 'update_to_student_role');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...