동적필드 생성 관련 문의드립니다.

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;
}

 

 

워드프레스 에러 기술지원 서비스 전문가에게 맡기세요
워드프레스 에러 기술지원 서비스 전문가에게 맡기세요
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기