Я пытался объединить следующие две функции, но могу успешно выполнять только одну или другую, но не обе одновременно. Мне было интересно, если бы кто-нибудь знал, что может быть причиной конфликта. Они выполняются при создании клиента с помощью 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);
Спасибо.