답글 입력필드 양식재사용 가능여부 문의

안녕하세요

워드프레스 게시판 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 와 같은 내용으로 변환되어 글이 송출 됩니다.

    https://imgur.com/yI6arf1

     

  • 그래도 해결되지 않으신다면

    올려주신 코드 중 $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은 하기 소스입니다.

  • 답변감사합니다.
    정상 작동 하는 것 같은데
    체크박스에서 하기와 같은 오류가 따라 옵니다
    Warning: in_array() expects parameter 2 to be array, string given in H:\htdocs\wp-content\themes\twentyseventeen\functions.php on line 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로 적용해주세요.

    고맙습니다.

  • 답변 감사합니다. 

    카테고리는 아니고

    입력필드에 대한 문의 였고요

    텍스트 에어리어, 체크박스, 셀렉트 박스 를 활용하고 있습니다.

  • 올려주신 코드를 저희 쪽 테스트 서버에서 확인해보니

    별 다른 문제를 확인하지 못했습니다.

    기존 테스트하던 게시글을 삭제하고 새로운 글 작성 후 답글을 작성해도

    같은 문제가 발생하는지 확인해보시겠어요?

    또, 글쓰기 관련된 다른 코드가 추가되어 있다면 잠시 비활성화한 후에도 확인해보세요.

    고맙습니다.

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