2017-12-28 42 views
0

잠시 동안 만든 적이 있고 내 웹 사이트에서 사용하고있는 맞춤 메타 보톡스가 있지만 저장 방법에 문제가 있습니다. 그것은 다소 휘발성이있는 경향이 있습니다. 즉, xml 또는 대량 편집으로 백업 할 때 항상 데이터가 손실됩니다. Wordpress Custom Metabox 체크 박스 저장 문제

다음

는 발생하지이 문제를 방지하기 위해 어떤 방법이 있나요 내가 체크 박스에 사용하고 그것을

function member_page_featured_meta() { 
     add_meta_box('member_page_meta', __('Page Template (if default, select none)', 'member_page_textdomain'), 'member_page_meta_callback', 'page', 'side', 'low'); 
    } 
add_action('add_meta_boxes', 'member_page_featured_meta'); 

/** 
* Outputs the content of the meta box 
*/ 

function member_page_meta_callback($post) { 
    $values = get_post_meta($post->ID); 
    $check = isset($values['member_box_check']) ? esc_attr($values['member_box_check'][0]) : ''; 
    wp_nonce_field(basename(__FILE__), 'member_page_nonce'); 
    $member_page_stored_meta = get_post_meta($post->ID); 
    ?> 

<p> 
    <div class="member_page-row-content"> 
     <label for="featured-checkbox"> 
      <input type="checkbox" name="featured-checkbox" id="featured-checkbox" value="yes" <?php if (isset ($member_page_stored_meta['featured-checkbox'])) checked($member_page_stored_meta['featured-checkbox'][0], 'yes'); ?> /> 
      <?php _e('Member Page', 'member_page_textdomain')?> 
     </label><br /> 
     <label for="list-checkbox"> 
      <input type="checkbox" name="list-checkbox" id="list-checkbox" value="yes" <?php if (isset ($member_page_stored_meta['list-checkbox'])) checked($member_page_stored_meta['list-checkbox'][0], 'yes'); ?> /> 
      <?php _e('Home List', 'member_page_textdomain')?> 
     </label><br /> 

    </div> 
</p> 

    <?php 
} 

/** 
* Saves the custom meta input 
*/ 
function member_page_meta_save($post_id) { 

    // Checks save status - overcome autosave, etc. 
    $is_autosave = wp_is_post_autosave($post_id); 
    $is_revision = wp_is_post_revision($post_id); 
    $is_valid_nonce = (isset($_POST[ 'member_page_nonce' ]) && wp_verify_nonce($_POST[ 'member_page_nonce' ], basename(__FILE__))) ? 'true' : 'false'; 

    // Exits script depending on save status 
    if ($is_autosave || $is_revision || !$is_valid_nonce) { 
     return; 
    } 

    // Checks for input and saves - save checked as yes and unchecked at no 
    //This line of code is my hack (just keeps the boxes from saving pretty much) 
    //if (!empty($_POST['featured-checkbox']) && !empty($_POST['list-checkbox'])) { 
      if(isset($_POST[ 'featured-checkbox' ])) { 
       update_post_meta($post_id, 'featured-checkbox', 'yes'); 
      } else { 
       update_post_meta($post_id, 'featured-checkbox', 'no'); 
      }; 
      if(isset($_POST[ 'list-checkbox' ])) { 
       update_post_meta($post_id, 'list-checkbox', 'yes'); 
      } else { 
       update_post_meta($post_id, 'list-checkbox', 'no'); 
      }; 
     // (bracket ending the first if statement) } 
    } 
    add_action('save_post', 'member_page_meta_save'); 

을 저장 코드 또는 체크를 저장할 때 처리되어야 뭔가있다 - 박스?

지금 작업하고있는 약간의 해킹을 정리했지만 체크 박스를 변경할 필요가있을 때마다 (사용 방법의 특성에 따라 상당히 자주 변경됨) 나는 몇 줄의 코드를 주석 처리하고, 변경을 가한 다음 코드 줄을 주석으로 제거하고 약간 비 독점적입니다.

백업 할 때 및 복원 할 때 (백업/제작 웹 사이트에서) 주로해야합니다.

답변

0

게시물이 생성되거나 업데이트되면 액션이 실행되므로 빠른 편집과 정기적 수정 및 게시물 가져 오기가 트리거합니다.

POST 배열에 이전에 저장된 체크 박스 값이 포함되어 있지 않기 때문에 빠른 수정 또는 가져 오기를 수행 할 때 실제로 포스트 메타를 지우는 스크립트입니다.

이 문제를 해결하려면 현재 진행중인 "저장 유형"을 알고 관리 영역의 게시물 편집 화면에서 게시물 메타를 업데이트해야합니다. 의 시작 부분에이 코드를 넣는

if (filter_input(INPUT_POST, 'action') != 'editpost') { 
    return; 
} 

: 포스트 편집 화면에서 저장할 때 action 매개 변수는 값 editpost을 가지고 있기 때문에이 일을하는 방법은 다음과 같은 POST 배열의 작용 매개 변수를 확인하는 것입니다 save_post 작업 (귀하의 경우에는 member_page_meta_save)에 연결된 기능을 사용하면 나머지 편집 기능은 게시 편집 화면에서 저장하는 경우에만 실행됩니다.

+0

빠른 편집 지우기를 방지하기 위해 정상적으로 작동하는 것으로 보입니다. 그러나 아직 백업으로 테스트하지는 않았지만 추가 질문이 있으면 여기에 의견을 말합니다. 도와 주셔서 감사합니다 :) –