1. 정확한 제품 또는 플러그인 이름
케이보드
2. 상세 내용
안녕하세요. 항상 감사히 사용하고 있습니다.
현재 동적필드 구현을 위해 다음과 같은 코드를 functions에 추가하였고,
phpMyAdmin에서 wp_kboard_board_option 확인 시 DB에도 잘 저장되는 것 같습니다.
그런데 문제는 다음 두가지 입니다.
1. 글 수정하기 누르면 생성되었던 동적필드와 함께 저장했던 data도 사라져 있습니다. 근데 또 db에는 남아있습니다.
2. 생성된 동적필드에 입력했던 내용이 게시글 본문에 표시 처리가 안됩니다.
어느 부분을 손보아야 할지.. 검색해봐도 마땅한 내용을 찾지 못하여 문의 드립니다.
새해엔 더욱 번창하세요. 감사합니다.
<?php
// 케이보드 게시판 필드항목 추가
add_filter('kboard_skin_fields', 'my_kboard_skin_fields', 10, 2);
function my_kboard_skin_fields($fields, $board)
{
if ($board->id == '2') {
if (!isset($fields['addfield'])) {
$fields['addfield'] = array(
'field_type' => 'addfield',
'field_label' => '추가상품정보',
'class' => 'kboard-attr-text',
'hidden' => '',
'meta_key' => 'addfield',
'field_name' => '',
'permission' => '',
'roles' => array(),
'default_value' => '',
'placeholder' => '',
'required' => '',
'show_document' => '',
'description' => '',
'close_button' => 'yes'
);
}
}
return $fields;
}
// 동적필드 생성/삭제 버튼 추가
add_filter('kboard_get_template_field_html', 'my_kboard_get_template_addfield_html', 10, 4);
function my_kboard_get_template_addfield_html($field_html, $field, $content, $board)
{
if ($field['field_type'] == 'addfield') {
ob_start();
?>
<div id="additionalInputsContainer"></div>
<button type="button" class="add-button" onclick="addNewInput()">상품정보 추가</button>
<script>
function addNewInput() {
var fields = [
{ labelFor: 'url', fieldName: '상품구매 링크', inputName: 'kboard_option_url', required: true, placeholder: '', inputType: 'text' },
{ labelFor: 'item', fieldName: '상품명', inputName: 'kboard_option_item', required: true, placeholder: '', inputType: 'text' },
];
var productCount = document.querySelectorAll('.attr-name1').length + 1;
var topAttrName = document.createElement('div');
topAttrName.className = 'attr-name1';
topAttrName.innerHTML = `<span class="field-name1">상품 ${productCount}</span>`;
document.getElementById('additionalInputsContainer').appendChild(topAttrName);
fields.forEach(function (field) {
var newDiv = document.createElement('div');
newDiv.className = `kboard-attr-row kboard-attr-text meta-key-${field.labelFor} ${field.required ? 'required' : ''}`;
var newLabel = document.createElement('label');
newLabel.className = "attr-name";
newLabel.setAttribute("for", `${field.labelFor}-${productCount}`);
newLabel.innerHTML = `<span class="field-name">${field.fieldName}</span> ${field.required ? '<span class="attr-required-text">*</span>' : ''}`;
var innerDiv = document.createElement('div');
innerDiv.className = "attr-value";
var newInput = document.createElement('input');
newInput.type = field.inputType;
newInput.id = `${field.labelFor}-${productCount}`;
newInput.className = field.required ? 'required' : '';
newInput.name = `${field.inputName}${productCount}`;
newInput.value = '';
newInput.placeholder = field.placeholder;
innerDiv.appendChild(newInput);
newDiv.appendChild(newLabel);
newDiv.appendChild(innerDiv);
topAttrName.appendChild(newDiv);
});
var deleteButton = document.createElement('button');
deleteButton.type = 'button';
deleteButton.className = 'delete-button';
deleteButton.innerHTML = '삭제';
deleteButton.onclick = function () {
deleteProduct(this);
};
topAttrName.appendChild(deleteButton);
}
function deleteProduct(button) {
var productContainer = button.parentNode;
productContainer.parentNode.removeChild(productContainer);
renumberProducts();
}
function renumberProducts() {
var productContainers = document.querySelectorAll('.attr-name1');
productContainers.forEach(function (container, index) {
var productNumber = index + 1;
container.querySelector('.field-name1').textContent = `상품 ${productNumber}`;
});
}
</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'] == 'addfield') {
$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->addfield}");
}
if ($field['field_type'] == 'url2') {
$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->url2}");
}
return $value_html;
}
AI에 의해 자동 생성된 답변이에요 😀
안녕하세요! 케이보드님, 항상 감사히 사용해주셔서 감사합니다. 동적 필드 생성과 관련하여 문의주셨는데요, 문제를 해결하기 위해 몇 가지 조치를 취해보실 수 있습니다.
1. 글 수정 시 동적 필드와 함께 저장된 데이터가 사라지는 문제에 대해서는, 아마도 수정 시에 기존 데이터를 불러오지 못해서 그럴 수 있습니다. 이 경우, 수정 버튼을 누를 때 기존 데이터를 불러와야 합니다. 이 부분을 확인해보시고 필요한 코드를 추가해주셔야 할 것 같습니다.
2. 생성된 동적 필드의 내용이 게시글 본문에 표시되지 않는 문제에 대해서는, 본문에 동적 필드의 내용을 출력하는 코드를 추가해주셔야 합니다. 현재 코드에서는 'kboard_document_add_option_value_field_html' 필터를 사용하여 본문에 동적 필드의 값을 출력하려고 시도하고 계신 것 같은데, 이 부분에서 문제가 발생하고 있는 것 같습니다. 필터 함수를 확인하시고 필요한 수정을 해주셔야 합니다.
위의 두 가지 문제에 대한 해결 방법은 아직 정확히 파악하지 못했지만, 위의 정보를 토대로 다시 문의주시면 더 자세한 도움을 드릴 수 있을 것입니다. 케이보드님의 워드프레스 지식을 바탕으로 가능한 조치를 안내해드리겠습니다. 번창하시길 바라며, 추가 문의가 있으시면 언제든지 말씀해주세요. 감사합니다!
↓ 아래 버튼을 눌러서 피드백해주세요.