안녕하세요?
회원 가입 시 몇가지를 선택하려는 옵션을 넣으려고 합니다.
그래서 아래와 같은 코드를 만들었는데요.
여기서
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"
안녕하세요?
말씀해주신대로 적용해 보니 잘 적용됩니다.
깊이 감사드립니다.
안녕하세요.
추가하신 플러그인을 활용해서 체크박스에 기본적으로 체크를 하시려면
우선, 수정하신 코드는 원래 상태로 복구해보시겠어요?
키($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)
),
고맙습니다.
안녕하세요?
문외한이라 조금만 문법과 혀익이 달라져도 응용하는데 애를 먹네요.
알려주신 페이지를 참고해서 아래와 같이 코드를 추가했는데요.
에러가 나면서 작동하비 않네요.
죄송지만 어디를 봐야하는지 알려부실 수 있을까요?
저는 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,
),
) );
}
감사합니다.
안녕하세요~^^
올려주신 코드를 확인해보니
우커머스 플러그인 woocommerce_form_field 함수를 활용하고 있는 듯합니다.
woocommerce_form_field 함수를 활용해서 체크박스를 추가할 때
페이지 로드 시 체크되도록 하는 방법은
아래의 링크를 참고해보시겠어요?
고맙습니다.
안녕하세요?
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 );
안녕하세요~^^
회원가입 페이지는 별도로 만드신 건지요?
워드프레스 사이트에서 플러그인을 활용해서 회원가입 페이지를 만드셨다면
어떤 플러그인을 사용 중이신지도 알려주시겠어요?
checked 속성은 html 태그 중 input 타입이 chexkbox인 태그에 적용하실 수 있습니다.
고맙습니다.