안녕하세요?
회원 가입 시 몇가지를 선택하려는 옵션을 넣으려고 합니다.
그래서 아래와 같은 코드를 만들었는데요.
여기서
1) 자동으로 체크되어서 보이게 하고 싶rh,
2) 여기에서 class 지정하려면 어디에다 class명을 넣어야 할까요? 기존 인터넷에서 찾을 수 있는 포맷이 아니라서 웹서핑이 도움이 안되는군요.
어떻게 해야할까요>
'iconic-register-checkboxes-option' => array(
'type' => 'checkboxes',
'label' => __( '가입 선택 동의 사항', 'iconic' ),
'options' => array(
1 => __( '[선택] 마케팅 정보 제공 동의', 'iconic' ),
2 => __( '[선택] 새로운 서비스를 위한 제3자 개인 정보 제공 동의', 'iconic' ),
),
'required' => false,
),
인터넷을 찾아보니 아래 명령을 사용할 수 있다고하는데요. 어디다 이를 넣어야할지 모르겠습니다.
checked="checked"
안녕하세요~^^
회원가입 페이지는 별도로 만드신 건지요?
워드프레스 사이트에서 플러그인을 활용해서 회원가입 페이지를 만드셨다면
어떤 플러그인을 사용 중이신지도 알려주시겠어요?
checked 속성은 html 태그 중 input 타입이 chexkbox인 태그에 적용하실 수 있습니다.
고맙습니다.
안녕하세요?
1. 위 질문에서 코드를 인용했지만 checkbox 형식입니다.
다만 일반적으로 보는 방식이 아니라서 checked를 러디에 넣어야 하는지를 몰라서 질문한 것입니다.
2. 별로 플러그인으로 만들지 않았습니다. 맨 아래 코드를 인용할께요.
다른 질문에서도 참고가 되는 내용입니다.
아래 코드를 적용했습니다.
<?php
/*
Plugin Name: WooCommerce Custom Account Fields
Plugin URI: https://iconicwp.com/blog/the-ultimate-guide-to-adding-custom-woocommerce-user-account-fields/
Description: Add custom WooCommerce user account fields.
Author: Iconic
Version: 1.0.0
Author URI: https://iconicwp.com/products/
*/
/**
* Get additional account fields.
*
* @return array
*/
function iconic_get_account_fields() {
return apply_filters( 'iconic_account_fields', array(
'first_name' => array(
'type' => 'text',
'label' => __( '이름', 'iconic' ),
'placeholder' => __( '성+이름 추천해요', 'iconic' ),
'hide_in_account' => false,
'hide_in_admin' => false,
'hide_in_checkout' => false,
'hide_in_registration' => false,
'required' => true,
),
'user_phone' => array(
'type' => 'tel',
'label' => __( '전화번호', 'iconic' ),
'placeholder' => __( '주연락 휴대 전화번호', 'iconic' ),
'hide_in_account' => false,
'hide_in_admin' => false,
'hide_in_checkout' => false,
'hide_in_registration' => false,
'required' => true,
),
'iconic-register-region-select' => array(
'type' => 'select',
'class' => 'iconic-register-region-select',
'label' => __( '활동지역 선택', 'iconic' ),
'options' => array(
// '' => __( '서울시', 'iconic' ),
1 => __( '서울시', 'iconic' ),
2 => __( '인천시', 'iconic' ),
3 => __( '경기도 북부', 'iconic' ),
4 => __( '경기도 남부', 'iconic' ),
5 => __( '충북', 'iconic' ),
6 => __( '충남', 'iconic' ),
7 => __( '경북', 'iconic' ),
8 => __( '경남', 'iconic' ),
9 => __( '전북', 'iconic' ),
10 => __( '전남', 'iconic' ),
11 => __( '제주', 'iconic' ),
),
'required' => false,
),
'iconic-register-ability-select' => array(
'type' => 'select',
'class' => 'iconic-register-ability-select',
'label' => __( '골프수준 선택', 'iconic' ),
'options' => array(
// '' => __( '90이상', 'iconic' ),
2 => __( '90이상', 'iconic' ),
1 => __( '100이상', 'iconic' ),
3 => __( '80이상', 'iconic' ),
4 => __( '70대', 'iconic' ),
),
'required' => false,
),
'iconic-register-checkboxes-required' => array(
'type' => 'checkboxes', 'checked',
'label' => __( '가입 필수 동의 사항', 'iconic' ),
'options' => array(
1 => __( '[필수] 만 14세 이상 확인', 'iconic' ),
2 => __( '[필수] <a href="https://ownergolf.net/privacy-policy/" target="_blank">개인보호정책</a> 및 <a href="https://ownergolf.net/terms-of-service/" target="_blank">이용 약관</a> 동의', 'iconic' ),
3 => __( '[필수] 사용 경험 강화를 위한 <a href="https://ownergolf.net/위치-정보-이용-정책/" target="_blank">위치 정보 이용</a> 동의', 'iconic' ),
4 => __( '[필수] 서비스 관련 메일/SMS 등 <a href="https://ownergolf.net/커뮤니케이션-정책/" target="_blank">커뮤니케이션</a> 동의', 'iconic' ),
),
'required' => true,
),
'iconic-register-checkboxes-option' => array(
'type' => 'checkboxes', 'checked',
'label' => __( '가입 선택 동의 사항', 'iconic' ),
'options' => array(
1 => __( '[선택] 마케팅 정보 제공 <a href="https://ownergolf.net/커뮤니케이션-정책/" target="_blank">메일/SMS 등 수신</a> 동의', 'iconic' ),
2 => __( '[선택] 새로운 서비스를 위한 <a href="https://ownergolf.net/제3자-개인-정보-제공-정책/" target="_blank">제3자 개인 정보 제공</a> 동의', 'iconic' ),
),
'required' => false,
),
) );
}
/**
* Add post values to account fields if set.
* @param array $fields
* @return array
*/
function iconic_add_post_data_to_account_fields( $fields ) {
if ( empty( $_POST ) ) {
return $fields;
}
foreach ( $fields as $key => $field_args ) {
if ( empty( $_POST[ $key ] ) ) {
$fields[ $key ]['value'] = '';
continue;
}
$fields[ $key ]['value'] = $_POST[ $key ];
}
return $fields;
}
add_filter( 'iconic_account_fields', 'iconic_add_post_data_to_account_fields', 10, 1 );
/**
* Add fields to registration form and account area.
*/
function iconic_print_user_frontend_fields() {
$fields = iconic_get_account_fields();
$is_user_logged_in = is_user_logged_in();
foreach ( $fields as $key => $field_args ) {
$value = null;
if ( ! iconic_is_field_visible( $field_args ) ) {
continue;
}
if ( $is_user_logged_in ) {
$user_id = iconic_get_edit_user_id();
$value = iconic_get_userdata( $user_id, $key );
}
$value = isset( $field_args['value'] ) ? $field_args['value'] : $value;
woocommerce_form_field( $key, $field_args, $value );
}
}
add_action( 'woocommerce_register_form', 'iconic_print_user_frontend_fields', 10 ); // register form
add_action( 'woocommerce_edit_account_form', 'iconic_print_user_frontend_fields', 10 ); // my account
/**
* Get user data.
*
* @param $user_id
* @param $key
*
* @return mixed|string
*/
function iconic_get_userdata( $user_id, $key ) {
if ( ! iconic_is_userdata( $key ) ) {
return get_user_meta( $user_id, $key, true );
}
$userdata = get_userdata( $user_id );
if ( ! $userdata || ! isset( $userdata->{$key} ) ) {
return '';
}
return $userdata->{$key};
}
/**
* Modify checkboxes/radio fields.
*
* @param $field
* @param $key
* @param $args
* @param $value
*
* @return string
*/
function iconic_form_field_modify( $field, $key, $args, $value ) {
ob_start();
iconic_print_list_field( $key, $args, $value );
$field = ob_get_clean();
if ( $args['return'] ) {
return $field;
} else {
echo $field;
}
}
add_filter( 'woocommerce_form_field_checkboxes', 'iconic_form_field_modify', 10, 4 );
add_filter( 'woocommerce_form_field_radio', 'iconic_form_field_modify', 10, 4 );
/**
* Get currently editing user ID (frontend account/edit profile/edit other user).
*
* @return int
*/
function iconic_get_edit_user_id() {
return isset( $_GET['user_id'] ) ? (int) $_GET['user_id'] : get_current_user_id();
}
/**
* Print a list field (checkboxes|radio).
*
* @param string $key
* @param array $field_args
* @param mixed $value
*/
function iconic_print_list_field( $key, $field_args, $value = null ) {
$value = empty( $value ) && $field_args['type'] === 'checkboxes' ? array() : $value;
?>
<div class="form-row">
<?php if ( ! empty( $field_args['label'] ) ) { ?>
<label>
<?php echo $field_args['label']; ?>
<?php if ( ! empty( $field_args['required'] ) ) { ?>
<abbr class="required" title="<?php echo esc_attr__( 'required', 'woocommerce' ); ?>">*</abbr>
<?php } ?>
</label>
<?php } ?>
<ul>
<?php foreach ( $field_args['options'] as $option_value => $option_label ) {
$id = sprintf( '%s_%s', $key, sanitize_title_with_dashes( $option_label ) );
$option_key = $field_args['type'] === 'checkboxes' ? sprintf( '%s[%s]', $key, $option_value ) : $key;
$type = $field_args['type'] === 'checkboxes' ? 'checkbox' : $field_args['type'];
$checked = $field_args['type'] === 'checkboxes' ? in_array( $option_value, $value ) : $option_value == $value;
?>
<li>
<label for="<?php echo esc_attr( $id ); ?>">
<input type="<?php echo esc_attr( $type ); ?>" id="<?php echo esc_attr( $id ); ?>" name="<?php echo esc_attr( $option_key ); ?>" value="<?php echo esc_attr( $option_value ); ?>" <?php checked( $checked ); ?>>
<?php echo $option_label; ?>
</label>
</li>
<?php } ?>
</ul>
</div>
<?php
}
/**
* Save registration fields.
*
* @param int $customer_id
*/
function iconic_save_account_fields( $customer_id ) {
$fields = iconic_get_account_fields();
$sanitized_data = array();
foreach ( $fields as $key => $field_args ) {
if ( ! iconic_is_field_visible( $field_args ) ) {
continue;
}
$sanitize = isset( $field_args['sanitize'] ) ? $field_args['sanitize'] : 'wc_clean';
$value = isset( $_POST[ $key ] ) ? call_user_func( $sanitize, $_POST[ $key ] ) : '';
if ( iconic_is_userdata( $key ) ) {
$sanitized_data[ $key ] = $value;
continue;
}
update_user_meta( $customer_id, $key, $value );
}
if ( ! empty( $sanitized_data ) ) {
$sanitized_data['ID'] = $customer_id;
wp_update_user( $sanitized_data );
}
}
add_action( 'woocommerce_created_customer', 'iconic_save_account_fields' ); // register/checkout
add_action( 'personal_options_update', 'iconic_save_account_fields' ); // edit own account admin
add_action( 'edit_user_profile_update', 'iconic_save_account_fields' ); // edit other account
add_action( 'woocommerce_save_account_details', 'iconic_save_account_fields' ); // edit WC account
/**
* Is this field core user data.
*
* @param $key
*
* @return bool
*/
function iconic_is_userdata( $key ) {
$userdata = array(
'user_pass',
'user_login',
'user_nicename',
'user_url',
'user_phone',
'user_email',
'display_name',
'nickname',
'first_name',
'last_name',
'description',
'rich_editing',
'user_registered',
'role',
'jabber',
'aim',
'yim',
'show_admin_bar_front',
);
return in_array( $key, $userdata );
}
/**
* Is field visible.
*
* @param $field_args
*
* @return bool
*/
function iconic_is_field_visible( $field_args ) {
$visible = true;
$action = filter_input( INPUT_POST, 'action' );
if ( is_admin() && ! empty( $field_args['hide_in_admin'] ) ) {
$visible = false;
} elseif ( ( is_account_page() || $action === 'save_account_details' ) && is_user_logged_in() && ! empty( $field_args['hide_in_account'] ) ) {
$visible = false;
} elseif ( ( is_account_page() || $action === 'save_account_details' ) && ! is_user_logged_in() && ! empty( $field_args['hide_in_registration'] ) ) {
$visible = false;
} elseif ( is_checkout() && ! empty( $field_args['hide_in_checkout'] ) ) {
$visible = false;
}
return $visible;
}
/**
* Add fields to admin area.
*/
function iconic_print_user_admin_fields() {
$fields = iconic_get_account_fields();
?>
<h2><?php _e( 'Additional Information', 'iconic' ); ?></h2>
<table class="form-table" id="iconic-additional-information">
<tbody>
<?php foreach ( $fields as $key => $field_args ) { ?>
<?php
if ( ! iconic_is_field_visible( $field_args ) ) {
continue;
}
$user_id = iconic_get_edit_user_id();
$value = iconic_get_userdata( $user_id, $key );
?>
<tr>
<th>
<label for="<?php echo $key; ?>"><?php echo $field_args['label']; ?></label>
</th>
<td>
<?php $field_args['label'] = false; ?>
<?php woocommerce_form_field( $key, $field_args, $value ); ?>
</td>
</tr>
<?php } ?>
</tbody>
</table>
<?php
}
add_action( 'show_user_profile', 'iconic_print_user_admin_fields', 30 ); // admin: edit profile
add_action( 'edit_user_profile', 'iconic_print_user_admin_fields', 30 ); // admin: edit other users
/**
* Validate fields on frontend.
*
* @param WP_Error $errors
*
* @return WP_Error
*/
function iconic_validate_user_frontend_fields( $errors ) {
$fields = iconic_get_account_fields();
foreach ( $fields as $key => $field_args ) {
if ( empty( $field_args['required'] ) ) {
continue;
}
if ( ! isset( $_POST['register'] ) && ! empty( $field_args['hide_in_account'] ) ) {
continue;
}
if ( isset( $_POST['register'] ) && ! empty( $field_args['hide_in_registration'] ) ) {
continue;
}
if ( empty( $_POST[ $key ] ) ) {
$message = sprintf( __( '%s is a required field.', 'iconic' ), '<strong>' . $field_args['label'] . '</strong>' );
$errors->add( $key, $message );
}
}
return $errors;
}
add_filter( 'woocommerce_registration_errors', 'iconic_validate_user_frontend_fields', 10 );
add_filter( 'woocommerce_save_account_details_errors', 'iconic_validate_user_frontend_fields', 10 );
/**
* Show fields at checkout.
*/
function iconic_checkout_fields( $checkout_fields ) {
$fields = iconic_get_account_fields();
foreach ( $fields as $key => $field_args ) {
if ( ! iconic_is_field_visible( $field_args ) ) {
continue;
}
// Make sure our fields have a default priority so
// no error is thrown when sorting them.
$field_args['priority'] = isset( $field_args['priority'] ) ? $field_args['priority'] : 0;
$checkout_fields['account'][ $key ] = $field_args;
}
// Default password field has no priority which throws an
// error when it tries to order the fields by priority.
if ( ! empty( $checkout_fields['account']['account_password'] ) && ! isset( $checkout_fields['account']['account_password']['priority'] ) ) {
$checkout_fields['account']['account_password']['priority'] = 0;
}
return $checkout_fields;
}
add_filter( 'woocommerce_checkout_fields', 'iconic_checkout_fields', 10, 1 );
안녕하세요~^^
올려주신 코드를 확인해보니
우커머스 플러그인 woocommerce_form_field 함수를 활용하고 있는 듯합니다.
woocommerce_form_field 함수를 활용해서 체크박스를 추가할 때
페이지 로드 시 체크되도록 하는 방법은
아래의 링크를 참고해보시겠어요?
고맙습니다.
안녕하세요?
문외한이라 조금만 문법과 혀익이 달라져도 응용하는데 애를 먹네요.
알려주신 페이지를 참고해서 아래와 같이 코드를 추가했는데요.
에러가 나면서 작동하비 않네요.
죄송지만 어디를 봐야하는지 알려부실 수 있을까요?
저는 iconic-register-checkboxes-required 필드의 체크박스를모두 체크하고 싶었기 때문에 iconic-register-checkboxes-required 필드가 시작되기전에
"$checked = $checkout->get_value( 'iconic-register-checkboxes-required' ) ? $checkout->get_value( 'iconic-register-checkboxes-required' ) : 1,"를 넣고
그 필드 맨 마지막에 $checked ),를 추가했습니다.
function iconic_get_account_fields() {
return apply_filters( 'iconic_account_fields', array(
'account_first_name' => array(
'type' => 'text',
'class' => array('account_first_name'),
'label' => __( '이름', 'iconic' ),
'placeholder' => __( '성+이름 추천해요', 'iconic' ),
'hide_in_account' => false,
'hide_in_admin' => false,
'hide_in_checkout' => false,
'hide_in_registration' => false,
'required' => true,
),
'user_phone' => array(
'type' => 'tel',
'label' => __( '전화번호', 'iconic' ),
'placeholder' => __( '주연락 휴대 전화번호', 'iconic' ),
'hide_in_account' => false,
'hide_in_admin' => false,
'hide_in_checkout' => false,
'hide_in_registration' => false,
'required' => true,
),
'iconic-register-region-select' => array(
'type' => 'select',
'class' => array('iconic-register-region-select'),
'label' => __( '활동지역 선택', 'iconic' ),
'options' => array(
// '' => __( '서울시', 'iconic' ),
1 => __( '서울시', 'iconic' ),
2 => __( '인천시', 'iconic' ),
3 => __( '경기도 북부', 'iconic' ),
4 => __( '경기도 남부', 'iconic' ),
5 => __( '충북', 'iconic' ),
6 => __( '충남', 'iconic' ),
7 => __( '경북', 'iconic' ),
8 => __( '경남', 'iconic' ),
9 => __( '전북', 'iconic' ),
10 => __( '전남', 'iconic' ),
11 => __( '제주', 'iconic' ),
),
'required' => false,
),
'iconic-register-ability-select' => array(
'type' => 'select',
'class' => array('iconic-register-ability-select'),
'label' => __( '골프수준 선택', 'iconic' ),
'options' => array(
// '' => __( '90이상', 'iconic' ),
2 => __( '90이상', 'iconic' ),
1 => __( '100이상', 'iconic' ),
3 => __( '80이상', 'iconic' ),
4 => __( '70대', 'iconic' ),
),
'required' => false,
),
$checked = $checkout->get_value( 'iconic-register-checkboxes-required' ) ? $checkout->get_value( 'iconic-register-checkboxes-required' ) : 1,
'iconic-register-checkboxes-required' => array(
'type' => 'checkboxes',
'class' => array('iconic-register-checkboxes-required'),
'label' => __( '가입 필수 동의 사항', 'iconic' ),
'options' => array(
1 => __( '[필수] 만 14세 이상 확인', 'iconic' ),
2 => __( '[필수] <a href="https://ownergolf.net/privacy-policy/" target="_blank">개인보호정책</a> 및 <a href="https://ownergolf.net/terms-of-service/" target="_blank">이용 약관</a> 동의', 'iconic' ),
3 => __( '[필수] 사용 경험 강화를 위한 <a href="https://ownergolf.net/위치-정보-이용-정책/" target="_blank">위치 정보 이용</a> 동의', 'iconic' ),
4 => __( '[필수] 서비스 관련 메일/SMS 등 <a href="https://ownergolf.net/커뮤니케이션-정책/" target="_blank">커뮤니케이션</a> 동의', 'iconic' ),
),
'required' => true,
), $checked ),
'iconic-register-checkboxes-option' => array(
'type' => 'checkboxes', 'checked',
'class' => array('iconic-register-checkboxes-option'),
'label' => __( '가입 선택 동의 사항', 'iconic' ),
'options' => array(
1 => __( '[선택] 마케팅 정보 제공 <a href="https://ownergolf.net/커뮤니케이션-정책/" target="_blank">메일/SMS 등 수신</a> 동의', 'iconic' ),
2 => __( '[선택] 새로운 서비스를 위한 <a href="https://ownergolf.net/제3자-개인-정보-제공-정책/" target="_blank">제3자 개인 정보 제공</a> 동의', 'iconic' ),
),
'required' => false,
),
) );
}
감사합니다.
안녕하세요.
추가하신 플러그인을 활용해서 체크박스에 기본적으로 체크를 하시려면
우선, 수정하신 코드는 원래 상태로 복구해보시겠어요?
키($key)가 iconic-register-checkboxes-required인 체크박스를 모두 체크되게 하시려면
아래의 코드를 찾아서
'iconic-register-checkboxes-required' => array(
'type' => 'checkboxes', 'checked',
'label' => __( '가입 필수 동의 사항', 'iconic' ),
'options' => array(
1 => __( '[필수] 만 14세 이상 확인', 'iconic' ),
2 => __( '[필수] <a href="https://ownergolf.net/privacy-policy/" target="_blank">개인보호정책</a> 및 <a href="https://ownergolf.net/terms-of-service/" target="_blank">이용 약관</a> 동의', 'iconic' ),
3 => __( '[필수] 사용 경험 강화를 위한 <a href="https://ownergolf.net/위치-정보-이용-정책/" target="_blank">위치 정보 이용</a> 동의', 'iconic' ),
4 => __( '[필수] 서비스 관련 메일/SMS 등 <a href="https://ownergolf.net/커뮤니케이션-정책/" target="_blank">커뮤니케이션</a> 동의', 'iconic' ),
),
'required' => true,
),
아래의 코드로 교체해보시겠어요?
'iconic-register-checkboxes-required' => array(
'type' => 'checkboxes', 'checked',
'label' => __( '가입 필수 동의 사항', 'iconic' ),
'options' => array(
1 => __( '[필수] 만 14세 이상 확인', 'iconic' ),
2 => __( '[필수] <a href="https://ownergolf.net/privacy-policy/" target="_blank">개인보호정책</a> 및 <a href="https://ownergolf.net/terms-of-service/" target="_blank">이용 약관</a> 동의', 'iconic' ),
3 => __( '[필수] 사용 경험 강화를 위한 <a href="https://ownergolf.net/위치-정보-이용-정책/" target="_blank">위치 정보 이용</a> 동의', 'iconic' ),
4 => __( '[필수] 서비스 관련 메일/SMS 등 <a href="https://ownergolf.net/커뮤니케이션-정책/" target="_blank">커뮤니케이션</a> 동의', 'iconic' ),
),
'required' => true,
'value' => array(1, 2, 3, 4)
),
고맙습니다.
안녕하세요?
말씀해주신대로 적용해 보니 잘 적용됩니다.
깊이 감사드립니다.