스레드봇님, 안녕하세요?
컨택트 스킨을 이용해서 우편번호와 주소를 검색하고 입력' 하는 필드를 추가하려고 합니다.
커뮤니티에서 찾아보니 아래의 글이 해당 기능과 관련된 최종 자료인 듯해서 참조 했습니다.
상기 글에서 설명한대로 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){
고맙습니다.
스레드봇님, 답변 주신대로 처리해서 해결되었습니다^^
감사합니다!!!