안녕하세요. 투표 기능을 만들기 위해서 게시판 필드 커스텀 중 해결되지 않는 부분이 있어 문의드립니다.
구현은 위 링크를 참조했습니다.
먼저, 아래와 같이 입력 필드를 설정했습니다.
add_filter('kboard_skin_fields', 'survey_kboard_skin_fields', 10, 2);
function survey_kboard_skin_fields($fields, $board){
if($board->id == '1'){ // 실제 적용될 게시판 ID 값으로 변경해주세요.
if(!isset($fields['survey'])){
$fields['survey'] = array(
'field_type' => 'survey',
'class' => 'kboard-attr-text',
'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', 'survey_kboard_get_template_field_html', 10, 4);
function survey_kboard_get_template_field_html($field_html, $field, $content, $board){
if($field['field_type'] == 'survey'){
ob_start();
?>
<div class="kboard-attr-row">
<input type="hidden" name="kboard_option_dynamic_field_index" value="<?php echo intval($content->option->dynamic_field_index)?>">
<label class="attr-name" for="kboard_option_survey">투표</label>
<div class="attr-value">
<button type="button" id='survey_add_btn' class="kboard-default-button-small" onclick="kboard_survey_add_question()">+</button>
<button type="button" id='survey_remove_btn' class="kboard-default-button-small" onclick="kboard_survey_remove_question()">-</button>
</div>
</div>
<script>
function kboard_survey_add_question(){
var index = parseInt(jQuery('input[name=kboard_option_dynamic_field_index]').val()) + 1;
jQuery('input[name=kboard_option_dynamic_field_index]').val(index);
var name = 'kboard_option_survey' + index;
var tag = '<input type="text" class="kboard_option_survey" name="'+name+'" value="" placeholder="향을 입력해 주세요" style="width:150px"> <br>';
jQuery("#survey_add_btn").before(jQuery.parseHTML(tag));
}
function kboard_survey_remove_question(){
var q_list = jQuery('.kboard_option_survey');
if(q_list.length >0){
jQuery(q_list[q_list.length-1]).next().remove();
jQuery(q_list[q_list.length-1]).remove();
}
var index = parseInt(jQuery('input[name=kboard_option_dynamic_field_index]').val()) - 1;
jQuery('input[name=kboard_option_dynamic_field_index]').val(index);
}
</script>
<?php
$field_html = ob_get_clean();
}
return $field_html;
}
여기까지 작성을 했을때는 db 상에도 아래 이미지와 같이 데이터가 잘 들어가고, 게시판에 필드도 잘 생성이 됩니다.
그런데 작성된 게시글 본문에서는 아예 데이터 조회가 되지 않습니다.
아래와 같이 echo만 찍어봐도 게시글 본문에서는 전혀 확인이 되지 않네요.
add_filter('kboard_document_add_option_value_field_html', 'survey_kboard_document_add_option_value_field_html', 10, 4);
function survey_kboard_document_add_option_value_field_html($value_html, $field, $content, $board){
echo "TEST1";
if($field['field_type'] == 'survey'){
echo 'TEST2';
}
$value_html = '';
return $value_html;
}
며칠간 분석해보았지만, 원인을 도저히 못찾겠습니다.
echo도 안되는 걸 보면 아예 등록한 필터가 작동하지 않는 것 같은데, 무엇이 원인일지 번거로우시겠지만 확인하여 주시면 감사하겠습니다.
안녕하세요~^^
입력 필드 설정 중 게시글 본문에 표시 체크박스는 체크되어 있는지요?
입력 필드의 메타키(옵션키)가 survey라면
$content->option->survey에 값이 저장이돼야 정상적으로 표시됩니다.
올려주신 이미지를 보면 DB에 저장된 값은
$content->option->survey1, $content->option->survey2 값입니다.
그렇기 때문에 필드 타입이 survey가 아닌 survey1로 교체해서 적용하시면 해당 코드가 실행될 듯합니다.
또, kboard_skin_fields 필터로 입력 필드 추가 시
field_label 설정이 없다면 에러가 발생할 수 있습니다.
올려주신 링크를 참고하셔서 field_label도 추가해보시겠어요?
고맙습니다.