WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

Дополнительный чекбокс в профиле

Нашел код, который выводит чекбокс в профиле, нужно чтобы пользователь подтвердит показывать определенный контент или нет.

Немного доработал код, чтобы полностью удалялась строка если галочку на чекбоксе уберут, не хочу пустыми строками БД засорять. Добавил delete_user_meta

Все работает, но хотелось бы убедиться что все правильно сделал, чтобы не вылезли сюрпризы, когда пользователи начнут использовать данную опцию.

## Добавляем данные на страницу редактирования профиля.
add_action( 'show_user_profile', 'yoursite_extra_user_profile_fields' );
add_action( 'edit_user_profile', 'yoursite_extra_user_profile_fields' );
function yoursite_extra_user_profile_fields( $user ) {
  $profok = get_the_author_meta( 'profok', $user->ID );
	echo '<label><input value="1" name="profok"' . checked( $profok, '1', false ) . ' type="checkbox" /> тест</label>';
}

## Сохраняем данные при сохранении
add_action( 'personal_options_update', 'yoursite_save_extra_user_profile_fields' );
add_action( 'edit_user_profile_update', 'yoursite_save_extra_user_profile_fields' );
function yoursite_save_extra_user_profile_fields( $user_id ) {
  $saved = false;
  if ( current_user_can( 'edit_user', $user_id ) ) {
	update_user_meta( $user_id, 'profok', $_POST['profok'] );
	$saved = true;
  }

if (!$_POST['profok'])  {
	  delete_user_meta( $user_id, 'profok', $_POST['profok'] );
	  $saved = true;
	  }
  return true;
}
0
lethalblo
год назад 15
  • 0
    ## Добавляем данные на страницу редактирования профиля.
    add_action( 'show_user_profile', 'yoursite_extra_user_profile_fields' );
    add_action( 'edit_user_profile', 'yoursite_extra_user_profile_fields' );
    function yoursite_extra_user_profile_fields( $user ) {
    	if ( ! current_user_can( 'edit_user' ) ) {
    		return false; // Запрещаем без права "edit_user" видеть чекбокс.
    	}
    
    	$profok = get_the_author_meta( 'profok', $user->ID );
    
    	echo '<label><input value="1" name="profok"' . checked( $profok, '1', false ) . ' type="checkbox" /> тест</label>';
    }
    
    ## Сохраняем данные при сохранении.
    add_action( 'personal_options_update', 'yoursite_save_extra_user_profile_fields' );
    add_action( 'edit_user_profile_update', 'yoursite_save_extra_user_profile_fields' );
    function yoursite_save_extra_user_profile_fields( $user_id ) {
    	if ( ! current_user_can( 'edit_user', $user_id ) ) {
    		return false; // Запрещаем без права "edit_user" сохранять или удалять значение опции.
    	}
    
    	// Если чекбокс отмечен и получаем значение '1', то сохраняем это значение.
    	// Если не сделать такую проверку, то в значение чекбокса можно что угодно написать и это сохранится в базу.
    	if ( '1' === $_POST['profok'] ) {
    		update_user_meta( $user_id, 'profok', (int) $_POST['profok'] ); // Так как передается число, то и проверяем на целое число через (int).
    	} else {
    		// Если поле будет пустое, то удаляем его.
    		delete_user_meta( $user_id, 'profok' );
    	}
    }
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация