Дополнительный чекбокс в профиле
Нашел код, который выводит чекбокс в профиле, нужно чтобы пользователь подтвердит показывать определенный контент или нет.
Немного доработал код, чтобы полностью удалялась строка если галочку на чекбоксе уберут, не хочу пустыми строками БД засорять. Добавил 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;
}
## Добавляем данные на страницу редактирования профиля. 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' ); } }