(완료) 컨택트 스킨에서 '우편번호와 주소 검색 및 입력' 필드 설정방법?

스레드봇님, 안녕하세요?

컨택트 스킨을 이용해서 우편번호와 주소를 검색하고 입력' 하는 필드를 추가하려고 합니다.

커뮤니티에서 찾아보니 아래의 글이 해당 기능과 관련된 최종 자료인 듯해서 참조 했습니다.

https://blog.cosmosfarm.com/archives/214/kboard-%ec%bc%80%ec%9d%b4%eb%b3%b4%eb%93%9c-%ea%b2%8c%ec%8b%9c%ed%8c%90%ec%97%90-%ec%83%88%eb%a1%9c%ec%9a%b4-%ed%95%84%eb%93%9c-%ec%b6%94%ea%b0%80%ed%95%98%ea%b8%b0/

 

상기 글에서 설명한대로 3개의 필터를 차일드 테마의 functions.php 에 그대로 추가했습니다.

그리고나서 해당 사이트를 들어가니 아래와 같은 에러 메세지가 나옵니다.

(에러메세지)

The site is experiencing technical difficulties.

 

그전에 문자알림과 개인정보 제공 및 동의와 같은 코드도 함께 있어서 생기는 문제인지

해결 방법을 찾고 싶습니다.

 

아래에 functions.phhp에 추가한 해당 코드 전체를 보여드립니다.

/* 개인정보 활용 동의 */
add_filter('kboard_skin_fields', 'my_kboard_skin_fields', 10, 2);
function my_kboard_skin_fields($fields, $board){
    if($board->id == '1'){ // 실제 적용될 게시판 ID 값으로 변경해주세요.
/*     if(in_array($board->id, array('1','2','3','4','5','6','7'))){        // 게시판이 여러 개일 경우...        */
        if(!isset($fields['agree_checkbox'])){
            $fields['agree_checkbox'] = array(
                'field_type' => 'agree_checkbox',
                'field_label' => '개인정보 제공 및 활용 동의서',
                'class' => 'kboard-attr-checkbox',
                'hidden' => '',
                'meta_key' => '',
                'field_name' => '',
                'permission' => '',
                'roles' => '',
                'default_value' => '',
                'placeholder' => '',
                'required' => '',
                'show_document' => '',
                'description' => '',
                'close_button' => 'yes'
            );
        }
    }
    
    return $fields;
}

/* 동의서 양식  */
add_filter('kboard_get_template_field_html', 'my_kboard_get_template_field_html', 10, 4);
function my_kboard_get_template_field_html($field_html, $field, $content, $board){
    if($field['field_type'] == 'agree_checkbox'){
        ob_start();
        ?>
        <div class="kboard-attr-row meta-key-<?php echo esc_attr($field['meta_key'])?> required">
            <label class="attr-name agree-title" for="agree_checkbox">
                <p class="field-name"><?php echo esc_html($field['field_name'] ? $field['field_name'] : $field['field_label'])?></p>
            </label>
            <div class="attr-value agree-content" style="margin:0;">
                <div class="privacy-announce" style="margin: 0; padding: 8px 20px 0px 10px; height: auto; line-height: 20px; background-color: #f2f2f2; overflow-y: auto;">
                    <ol>
                        <li><strong>수집 목적</strong> : 회원가입 및 서비스 신청 등과 관련된 상담안내</li>
                        <li><strong>수집 항목</strong> : 이름 ,전화번호, IP (자동수집)</li>
                        <li><strong>보유 및 이용기간</strong> : 상담 및 해당 업무 종료 후 1년 이내 파기</li>
                    </ol>
                    <p style="font-size: 14px; padding-left: 20px; padding-bottom: 12px; line-height: 20px; color: #1d9dee;">※ 개인정보 수집 및 이용에 대해서 거부할 수 있으며, 거부 시에는 가입 및 상담 등의 안내 서비스를 받으실 수 없습니다.</p>
                </div>
                <div style="text-align:center;">
                    <input type="hidden" class="required" name="kboard_option_<?php echo esc_attr($field['meta_key'])?>" value="1">
                    <label><input type="checkbox" class="required" name="kboard_option_<?php echo esc_attr($field['meta_key'])?>" value="1"> 개인정보이용 동의</label>
                </div>
            </div>
        </div>
        <?php
        $field_html = ob_get_clean();
    }
    return $field_html;
}

/* 휴대폰에 문자 발송하는 기능 */

add_action('kboard_document_insert', 'my_kboard_document_insert', 10, 4);
function my_kboard_document_insert($content_uid, $board_id, $content, $board){
    if($board_id == '1'){ 
        $phone = '010-0000-0000';        // 전화번호는 실제 전화번호로 입력함.
        $phone2 = '010-0000-0000';        // 전화번호는 실제 전화번호로 입력함.
        $message = "제목 : {$content->title}\n";
        $message .= "신청자 : {$content->member_display}\n";
        $message .= "연락처 : {$content->option->{'contact_phone'}}\n";
        $message .= "전달사항 : {$content->content}\n";
        cosmosfarm_members_sms_send($phone, $message);
        cosmosfarm_members_sms_send($phone2, $message);
    }
}


/* 우편번호- 입력필드 설정에 표시됨 */


add_filter('kboard_skin_fields', 'my_kboard_skin_fields', 10, 2);
function my_kboard_skin_fields($fields, $board){
    
    if($board->id == '1'){ // 실제 적용될 게시판 ID 값으로 변경해주세요.
        
        if(!isset($fields['address'])){
            $fields['address'] = array(
                'field_type' => 'address',
                'field_label' => '주소',
                'class' => 'kboard-attr-text',
                'hidden' => '',
                'meta_key' => '',
                'field_name' => '',
                'permission' => '',
                'roles' => '',
                'default_value' => '',
                'placeholder' => '',
                'required' => '',
                'show_document' => '',
                'description' => '',
                'close_button' => 'yes'
            );
        }
    }
    
    return $fields;
}

/* 게시글 작성시 보여지는 필드의 HTML 코드를 출력 */

add_filter('kboard_get_template_field_html', 'my_kboard_get_template_field_html', 10, 4);
function my_kboard_get_template_field_html($field_html, $field, $content, $board){
    
    if($field['field_type'] == 'address'){
        
        // 페이지에 Daum 우편번호 서비스 자바스크립트 라이브러리를 추가합니다.
        wp_enqueue_script('daum-postcode', 'https://spi.maps.daum.net/imap/map_js_init/postcode.v2.js', array(), '', true);
        
        ob_start();
        ?>
        <div class="kboard-attr-row">
            <label class="attr-name" for="kboard_option_postcode">우편번호/주소</label>
            <div class="attr-value">
                <input type="text" id="kboard_option_postcode" name="kboard_option_postcode" value="<?php echo $content->option->postcode?>" placeholder="우편번호..." style="width:100px">
                <input type="text" id="kboard_option_address" name="kboard_option_address" value="<?php echo $content->option->address?>" placeholder="주소...">
                <button type="button" class="kboard-default-button-small" onclick="kboard_postcode_address_search()">우편번호/주소 검색</button>
            </div>
        </div>
        <script>
        function kboard_postcode_address_search(){
            var width = 500;
            var height = 600;
            new daum.Postcode({
                width: width,
                height: height,
                oncomplete: function(data){
                    jQuery('#kboard_option_postcode').val(data.zonecode);
                    jQuery('#kboard_option_address').val(data.roadAddress);
                    
                    setTimeout(function(){
                        jQuery('#kboard_option_address').focus();
                    });
                }
            }).open({
                left: (screen.availWidth-width)*0.5,
                top: (screen.availHeight-height)*0.5
            });
        }
        </script>
        <?php
        $field_html = ob_get_clean();
    }
    
    return $field_html;
}


/* 게시글 본문에 입력된 필드의 값을 출력 */
add_filter('kboard_document_add_option_value_field_html', 'my_kboard_document_add_option_value_field_html', 10, 4);
function my_kboard_document_add_option_value_field_html($value_html, $field, $content, $board){
    
    if($field['field_type'] == 'address'){
        $value_html = sprintf('<div class="kboard-document-add-option-value meta-key-%s"><span class="option-name">%s</span> : %s</div><hr>', $field['field_type'], $field['field_name'], "({$content->option->postcode}) {$content->option->address}");
    }
    
    return $value_html;
}

 

위 내용의 검토를 부탁드리겠습니다^^;;;

감사합니다!!!

 

좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
  • 안녕하세요~^^

    올려주신 코드를 확인해보니 PHP 함수명 중복 문제로 보입니다.

    워드프레스에서 액션이나 필터는 중복해서 사용할 수 있지만

    PHP 함수명은 중복되면 동작하지 않습니다.

     

    기존에 있던 코드와 새로운 코드가 충돌이 나는 듯합니다.

     

    올려주신 코드 중 아래의 코드를

    /* 우편번호- 입력필드 설정에 표시됨 */
    
    
    add_filter('kboard_skin_fields', 'my_kboard_skin_fields', 10, 2);
    function my_kboard_skin_fields($fields, $board){

    아래의 코드로 교체해보시겠어요?

    /* 우편번호- 입력필드 설정에 표시됨 */
    
    
    add_filter('kboard_skin_fields', 'my_kboard_skin_fields1', 10, 2);
    function my_kboard_skin_fields1($fields, $board){

     

    아래의 코드를

    /* 게시글 작성시 보여지는 필드의 HTML 코드를 출력 */
    
    add_filter('kboard_get_template_field_html', 'my_kboard_get_template_field_html', 10, 4);
    function my_kboard_get_template_field_html($field_html, $field, $content, $board){

    아래의 코드로 교체해보세요.

    /* 게시글 작성시 보여지는 필드의 HTML 코드를 출력 */
    
    add_filter('kboard_get_template_field_html', 'my_kboard_get_template_field_html1', 10, 4);
    function my_kboard_get_template_field_html1($field_html, $field, $content, $board){

    고맙습니다.

  • 스레드봇님, 답변 주신대로 처리해서 해결되었습니다^^
    감사합니다!!!

     

이미지 사진은 imgur에 업로드한 뒤 링크 걸어주세요.
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기