Как добавить редактируемые поля на страницу юзера в админке

Как добавить редактируемые поля на страницу юзера в админке

Konark 26 апреля, 2021 Комментариев (0)

Продолжаем разбираться с кастом полями для WooCommerce. Обычно, после первого заказа и регистрации, данные с Ваших произвольных полей сохраняются за пользователем. И, возможно, Вам бы хотелось их редактировать из админки.

После добавления кастом полей, увы, это не происходит по умолчанию. Значит, нам нужно это сделать самостоятельно. Код, как обычно, вставляем в functions.php. Код для вывода вешаем на два хука show_user_profile и edit_user_profile:

add_action( 'show_user_profile', 'custom_billing_fields', 30 );
add_action( 'edit_user_profile', 'custom_billing_fields', 30 );
function custom_billing_fields( $user ) {
	?> 
	<h2><?php _e( 'Additional billing address', 'kadence-child' ); ?></h2>
	<?php
	if ( empty( $user ) ) {
        $user_id = get_current_user_id();
        $user = get_userdata( $user_id );
	}

	?>
	<table class="form-table" id="fieldset-additional-billing">
		<tbody>
			<tr>
				<th>
					<label for="billing_gender"><?php _e( 'Gender', 'kadence-child' );?></label>
				</th>
				<td>
					<?php 
						woocommerce_form_field( 
							'billing_gender', 
							array(
								'type' => 'select',
								'options' => array(
									'' => __( 'Select gender', 'kadence-child' ),
									'male' => __( 'Male', 'kadence-child' ),
									'female' => __( 'Female', 'kadence-child' )
								),
								'required' => true,
							),
							( get_the_author_meta( 'billing_gender', $user->ID ) ) ? get_the_author_meta( 'billing_gender', $user->ID ) : $user->get_value( 'billing_gender' )
						); 
					?>
				</td>
			</tr>

			<tr>
				<th>
					<label for="billing_title"><?php _e( 'Title', 'kadence-child' );?></label>
				</th>
				<td>
					<?php 
						woocommerce_form_field( 
							'billing_title', 
							array(
								'type' => 'text',
								'placeholder' => __( 'Title', 'kadence-child' ),
								'required' => false,
							),
							( get_the_author_meta( 'billing_title', $user->ID ) ) ? get_the_author_meta( 'billing_title', $user->ID ) : $user->get_value( 'billing_title' )
						); 
					?>
				</td>
			</tr>

			<tr>
				<th>
					<label for="billing_addition"><?php _e( 'Addition', 'kadence-child' );?></label>
				</th>
				<td>
					<?php 
						woocommerce_form_field( 
							'billing_addition', 
							array(
								'type' => 'text',
								'placeholder' => __( 'Addition', 'kadence-child' ),
								'required' => false,
							),
							( get_the_author_meta( 'billing_addition', $user->ID ) ) ? get_the_author_meta( 'billing_addition', $user->ID ) : $user->get_value( 'billing_addition' )
						); 
					?>
				</td>
			</tr>
		</tbody>
	</table>
	<?php
}

Для сохранения изменений на personal_options_update, edit_user_profile_update, woocommerce_save_account_details. Сразу на несколько, для того чтобы отработать точно все кейсы.

add_action( 'personal_options_update', 'custom_billing_fields_update' ); // For admin panel
add_action( 'edit_user_profile_update', 'custom_billing_fields_update' );
add_action( 'woocommerce_save_account_details', 'custom_billing_fields_update' );
function custom_billing_fields_update( $user_id ) {
	if ( isset( $_POST['billing_gender'] ) ) {
		update_user_meta( $user_id, 'billing_gender', sanitize_text_field( $_POST['billing_gender'] ) );
	}

	if ( isset( $_POST['billing_title'] ) ) {
		update_user_meta( $user_id, 'billing_title', wc_clean( $_POST[ 'billing_title' ] ) );
	}

	if ( isset( $_POST['billing_addition'] ) ) {
		update_user_meta( $user_id, 'billing_addition', wc_sanitize_textarea( $_POST[ 'billing_addition' ] ) );
	}
}
Просмотров: 239

Добавить комментарий

Ваш e-mail не будет опубликован. Имя и e-mail обязательны для заполнения.