안녕하세요
워드프레스 게시판 KBoard(케이보드) 사용중입니다.
카테고리 원글에 입력필드를 설정해서
답글을 작성했을시
원글에 작성된 입력필드는
그대로 따라가게 만들 수 있을까요?
안녕하세요~^^
KBoard 플러그인에서 답글 작성 시 카테고리를
원글의 카테고리로 자동 설정하는 방법은
아래의 링크를 참고 부탁드립니다.
https://www.cosmosfarm.com/threads/document/25643
카테고리가 아닌 다른 입력 필드에도 적용하고 싶으시다면
어떤 형태(텍스트/숨김, 셀렉트 박스 등)의 입력 필드를 활용하고 계신지 알려주시겠어요?
고맙습니다.
add_filter('kboard_get_template_field_html', 'kboard_get_template_field_html_20200707', 10, 4);
function kboard_get_template_field_html_20200707($html, $field, $content, $board){
$parent_uid = kboard_parent_uid();
if($parent_uid && $board->id == '10'){ // 실제 게시판 id로 적용해주세요.
$fields = $board->fields();
$meta_key = isset($field['meta_key']) ? esc_attr($field['meta_key']) : '';
$field_type = isset($field['field_type']) ? $field['field_type'] : '';
$required = isset($field['required']) ? 'required' : '';
$field_name = isset($field['field_name'])&&$field['field_name'] ? esc_attr($field['field_name']) : esc_attr($field['field_label']);
$placeholder = isset($field['placeholder']) ? esc_attr($field['placeholder']) : '';
$parent = new KBContent();
$parent->initWithUID($parent_uid);
$value = $parent->option->{$meta_key} ? $parent->option->{$meta_key} : '';
if($field_type == 'textarea'){
ob_start();
?>
<div class="kboard-attr-row <?php echo esc_attr($field['class'])?> meta-key-<?php echo esc_attr($meta_key)?> <?php echo esc_attr($required)?>">
<label class="attr-name" for="<?php echo esc_attr($meta_key)?>"><span class="field-name"><?php echo esc_html($field_name)?></span><?php if($required):?> <span class="attr-required-text">*</span><?php endif?></label>
<div class="attr-value">
<textarea id="<?php echo esc_attr($meta_key)?>" name="<?php echo esc_attr($fields->getOptionFieldName($meta_key))?>"class="editor-textarea <?php echo esc_attr($required)?>"<?php if($placeholder):?> placeholder="<?php echo esc_attr($placeholder)?>"<?php endif?>><?php echo $content->option->{$meta_key}?esc_textarea($content->option->{$meta_key}):esc_textarea($value)?></textarea>
<?php if(isset($field['description']) && $field['description']):?><div class="description"><?php echo esc_html($field['description'])?></div><?php endif?>
</div>
</div>
<?php
$html = ob_get_clean();
}
elseif($field_type == 'checkbox'){
ob_start();
?>
<?php if(isset($field['row']) && $field['row']):?>
<div class="kboard-attr-row <?php echo esc_attr($field['class'])?> meta-key-<?php echo esc_attr($meta_key)?> <?php echo esc_attr($required)?>">
<label class="attr-name" for="<?php echo esc_attr($meta_key)?>"><span class="field-name"><?php echo esc_html($field_name)?></span><?php if($required):?> <span class="attr-required-text">*</span><?php endif?></label>
<div class="attr-value">
<input type="hidden" name="<?php echo esc_attr($fields->getOptionFieldName($meta_key))?>" value="">
<?php foreach($field['row'] as $option_key=>$option_value):?>
<?php if(isset($option_value['label']) && $option_value['label']):?>
<?php if($content->option->{$meta_key}):?>
<label class="attr-value-label"><input type="checkbox" name="<?php echo esc_attr($fields->getOptionFieldName($meta_key))?>[]"class="<?php echo esc_attr($required)?>"<?php if($fields->isSavedOption($content->option->{$meta_key}, $option_value['label'])):?> checked<?php endif?> value="<?php echo esc_attr($option_value['label'])?>"> <?php echo esc_html($option_value['label'])?></label>
<?php else:?>
<label class="attr-value-label"><input type="checkbox" name="<?php echo esc_attr($fields->getOptionFieldName($meta_key))?>[]"class="<?php echo esc_attr($required)?>"<?php if($value && is_array($value) && in_array($option_value['label'], $value)):?> checked<?php endif?> value="<?php echo esc_attr($option_value['label'])?>"> <?php echo esc_html($option_value['label'])?></label>
<?php endif?>
<?php endif?>
<?php endforeach?>
<?php if(isset($field['description']) && $field['description']):?><div class="description"><?php echo esc_html($field['description'])?></div><?php endif?>
</div>
</div>
<?php endif?>
<?php
$html = ob_get_clean();
}
elseif($field_type == 'select'){
ob_start();
?>
<div class="kboard-attr-row <?php echo esc_attr($field['class'])?> meta-key-<?php echo esc_attr($meta_key)?> <?php echo esc_attr($required)?>">
<label class="attr-name" for="<?php echo esc_attr($meta_key)?>"><span class="field-name"><?php echo esc_html($field_name)?></span><?php if($required):?> <span class="attr-required-text">*</span><?php endif?></label>
<div class="attr-value">
<select id="<?php echo esc_attr($meta_key)?>" name="<?php echo esc_attr($fields->getOptionFieldName($meta_key))?>"class="<?php echo esc_attr($required)?>">
<option value=""><?php echo __('Select', 'kboard')?></option>
<?php foreach($field['row'] as $option_key=>$option_value):?>
<?php if(isset($option_value['label']) && $option_value['label']):?>
<?php if($content->option->{$meta_key}):?>
<option value="<?php echo esc_attr($option_value['label'])?>"<?php if($fields->isSavedOption($content->option->{$meta_key}, $option_value['label'])):?> selected<?php endif?>><?php echo esc_html($option_value['label'])?></option>
<?php else:?>
<option value="<?php echo esc_attr($option_key)?>"<?php if($value && $value==$option_value['label']):?> selected<?php endif?>><?php echo esc_html($option_value['label'])?></option>
<?php endif?>
<?php endif?>
<?php endforeach?>
</select>
<?php if(isset($field['description']) && $field['description']):?><div class="description"><?php echo esc_html($field['description'])?></div><?php endif?>
</div>
</div>
<?php
$html = ob_get_clean();
}
}
return $html;
}
functions.php 하단에 추가한 내용을 올리니 검토해주시면 감사하겠습니다.
실제 적용하신 코드를 에디터의 코드 스니펫 삽입 기능을 사용해서 올려주시겠어요?
고맙습니다.
1. 마지막 으로 해도 체크박스는 원글양식 따라 답글에 작성되지 않습니다.
2. 셀렉트 박스도 답글 작성을 누르면 작성글에는 정상으로 따라오나,
실제로 답글을 저장하면
5ef964f160e55 와 같은 내용으로 변환되어 글이 송출 됩니다.
그래도 해결되지 않으신다면
올려주신 코드 중 $value && 코드를
$value && is_array($value) && 코드로 교체해서도 확인해보시겠어요?
고맙습니다.
<label class="attr-value-label"><input type="checkbox" name="<?php echo esc_attr($fields->getOptionFieldName($meta_key))?>[]"class="<?php echo esc_attr($required)?>"<?php if($value && in_array($option_value['label'], $value)):?> checked<?php endif?> value="<?php echo esc_attr($option_value['label'])?>"> <?php echo esc_html($option_value['label'])?></label>
자꾸 문의드려 죄송합니다. 같은 오류가 뜨고, 오류가 뜨는 위치는 상기와 같습니다.
제 다른 소스랑 겹쳐서 그런건지, 궁금하네요. 다시한번 송구합니다.. 텍스트 에어리어랑 셀렉트 박스는 작동을 잘 하는데, 체크박스가 미작동하고 아이템들에 오류문구가 붙습니다..
안녕하세요.
이전 댓글에 안내해드린 코드 중 불필요한 코드 및 버그를 수정해두었습니다.
기존의 코드를 지우신 후 바뀐 코드로 적용하셔서 확인해보시겠어요?
고맙습니다.
<label class="attr-value-label"><input type="checkbox" name="<?php echo esc_attr($fields->getOptionFieldName($meta_key))?>[]"class="<?php echo esc_attr($required)?>"<?php if($value && in_array($option_value['label'], $value)):?> checked<?php endif?> value="<?php echo esc_attr($option_value['label'])?>"> <?php echo esc_html($option_value['label'])?></label>
상기 1407은 하기 소스입니다.
답글 작성 시 원글의 텍스트 에어리어, 체크박스, 셀렉트 박스 입력 필드의 값이
답글의 입력 필드 기본 값으로 설정되게 하시려면
아래의 코드를 활용해보시겠어요?
add_filter('kboard_get_template_field_html', 'kboard_get_template_field_html_20200707', 10, 4);
function kboard_get_template_field_html_20200707($html, $field, $content, $board){
$parent_uid = kboard_parent_uid();
if($parent_uid && $board->id == '1'){ // 실제 게시판 id로 적용해주세요.
$fields = $board->fields();
$meta_key = isset($field['meta_key']) ? esc_attr($field['meta_key']) : '';
$field_type = isset($field['field_type']) ? $field['field_type'] : '';
$required = isset($field['required']) ? 'required' : '';
$field_name = isset($field['field_name'])&&$field['field_name'] ? esc_attr($field['field_name']) : esc_attr($field['field_label']);
$placeholder = isset($field['placeholder']) ? esc_attr($field['placeholder']) : '';
$parent = new KBContent();
$parent->initWithUID($parent_uid);
$value = $parent->option->{$meta_key} ? $parent->option->{$meta_key} : '';
if($field_type == 'textarea'){
ob_start();
?>
<div class="kboard-attr-row <?php echo esc_attr($field['class'])?> meta-key-<?php echo esc_attr($meta_key)?> <?php echo esc_attr($required)?>">
<label class="attr-name" for="<?php echo esc_attr($meta_key)?>"><span class="field-name"><?php echo esc_html($field_name)?></span><?php if($required):?> <span class="attr-required-text">*</span><?php endif?></label>
<div class="attr-value">
<textarea id="<?php echo esc_attr($meta_key)?>" name="<?php echo esc_attr($fields->getOptionFieldName($meta_key))?>"class="editor-textarea <?php echo esc_attr($required)?>"<?php if($placeholder):?> placeholder="<?php echo esc_attr($placeholder)?>"<?php endif?>><?php echo $content->option->{$meta_key}?esc_textarea($content->option->{$meta_key}):esc_textarea($value)?></textarea>
<?php if(isset($field['description']) && $field['description']):?><div class="description"><?php echo esc_html($field['description'])?></div><?php endif?>
</div>
</div>
<?php
$html = ob_get_clean();
}
elseif($field_type == 'checkbox'){
ob_start();
?>
<?php if(isset($field['row']) && $field['row']):?>
<div class="kboard-attr-row <?php echo esc_attr($field['class'])?> meta-key-<?php echo esc_attr($meta_key)?> <?php echo esc_attr($required)?>">
<label class="attr-name" for="<?php echo esc_attr($meta_key)?>"><span class="field-name"><?php echo esc_html($field_name)?></span><?php if($required):?> <span class="attr-required-text">*</span><?php endif?></label>
<div class="attr-value">
<input type="hidden" name="<?php echo esc_attr($fields->getOptionFieldName($meta_key))?>" value="">
<?php foreach($field['row'] as $option_key=>$option_value):?>
<?php if(isset($option_value['label']) && $option_value['label']):?>
<?php if($content->option->{$meta_key}):?>
<label class="attr-value-label"><input type="checkbox" name="<?php echo esc_attr($fields->getOptionFieldName($meta_key))?>[]"class="<?php echo esc_attr($required)?>"<?php if($fields->isSavedOption($content->option->{$meta_key}, $option_value['label'])):?> checked<?php endif?> value="<?php echo esc_attr($option_value['label'])?>"> <?php echo esc_html($option_value['label'])?></label>
<?php else:?>
<label class="attr-value-label"><input type="checkbox" name="<?php echo esc_attr($fields->getOptionFieldName($meta_key))?>[]"class="<?php echo esc_attr($required)?>"<?php if($value && in_array($option_value['label'], $value)):?> checked<?php endif?> value="<?php echo esc_attr($option_value['label'])?>"> <?php echo esc_html($option_value['label'])?></label>
<?php endif?>
<?php endif?>
<?php endforeach?>
<?php if(isset($field['description']) && $field['description']):?><div class="description"><?php echo esc_html($field['description'])?></div><?php endif?>
</div>
</div>
<?php endif?>
<?php
$html = ob_get_clean();
}
elseif($field_type == 'select'){
ob_start();
?>
<div class="kboard-attr-row <?php echo esc_attr($field['class'])?> meta-key-<?php echo esc_attr($meta_key)?> <?php echo esc_attr($required)?>">
<label class="attr-name" for="<?php echo esc_attr($meta_key)?>"><span class="field-name"><?php echo esc_html($field_name)?></span><?php if($required):?> <span class="attr-required-text">*</span><?php endif?></label>
<div class="attr-value">
<select id="<?php echo esc_attr($meta_key)?>" name="<?php echo esc_attr($fields->getOptionFieldName($meta_key))?>"class="<?php echo esc_attr($required)?>">
<option value=""><?php echo __('Select', 'kboard')?></option>
<?php foreach($field['row'] as $option_key=>$option_value):?>
<?php if(isset($option_value['label']) && $option_value['label']):?>
<?php if($content->option->{$meta_key}):?>
<option value="<?php echo esc_attr($option_value['label'])?>"<?php if($fields->isSavedOption($content->option->{$meta_key}, $option_value['label'])):?> selected<?php endif?>><?php echo esc_html($option_value['label'])?></option>
<?php else:?>
<option value="<?php echo esc_attr($option_key)?>"<?php if($value && $value==$option_value['label']):?> selected<?php endif?>><?php echo esc_html($option_value['label'])?></option>
<?php endif?>
<?php endif?>
<?php endforeach?>
</select>
<?php if(isset($field['description']) && $field['description']):?><div class="description"><?php echo esc_html($field['description'])?></div><?php endif?>
</div>
</div>
<?php
$html = ob_get_clean();
}
}
return $html;
}
위의 코드에서 $board->id == '1' 부분은 실제 게시판 id로 적용해주세요.
고맙습니다.
답변 감사합니다.
카테고리는 아니고
입력필드에 대한 문의 였고요
텍스트 에어리어, 체크박스, 셀렉트 박스 를 활용하고 있습니다.
올려주신 코드를 저희 쪽 테스트 서버에서 확인해보니
별 다른 문제를 확인하지 못했습니다.
기존 테스트하던 게시글을 삭제하고 새로운 글 작성 후 답글을 작성해도
같은 문제가 발생하는지 확인해보시겠어요?
또, 글쓰기 관련된 다른 코드가 추가되어 있다면 잠시 비활성화한 후에도 확인해보세요.
고맙습니다.