2017-02-15 4 views
1

게시물에 metaboxes를 추가하는 방법을 배우고 있습니다. 나는 텍스트 입력과 여러 개의 checboxes로 metaboxes 그룹을 만들고 싶습니다. 지금 당장 체크 박스는 그곳에 놓여 지지만 결국 다른 장소의 내용으로 foreach 루프에 의해 생성 될 것입니다. 그래서 엔트리 [0], 엔트리 [1]과 같은 이름을 부여하는 것이 중요합니다. 얼마나 많은 것들이 생성 될지 알지 못하기 때문에 루프에 의해 저장되어야합니다.Wordpress에서 여러 체크 박스 대사로부터 데이터를 저장하십시오.

// adding the metaboxes 

    function add_post_reference() { 
     add_meta_box('post-reference', 'Reference', 'referenceCallBack', 'languagecourses', 'side', 'high'); 
    } 
    add_action('add_meta_boxes', 'add_post_reference'); 

    // callback function 

    function referenceCallBack($post) { 
     wp_nonce_field('reference_meta_box', 'reference_nonce'); 

     $name_value = get_post_meta($post->ID, '_post_reference_name', true); 
     $link_value = get_post_meta($post->ID, '_post_reference_link', true); 

내 체크 박스에 위와 동일한 일을하려고하지만 난 거기에 넣어 모르는 :

 $teachers_value = get_post_meta($post->ID, 'what do I put here?', true); // what do I put here? 

HTML을 반향

내가 지금까지 무엇을 가지고 구조 (텍스트 입력 작업 (값 저장)), 확인란을 저장하는 방법을 알아 내려고 노력하고 있습니다.

 echo '<label for="reference-name">'. 'Reference Name' .'</label>'; 
     echo '<input type="text" id="reference-name" name="post_reference_name" placeholder="Example" value="'.$name_value.'" size="25"/>'; 
     echo '<p class="howto">'. 'Add the name of the reference' .'</p>'; 

     echo '<label for="reference-link">'. 'Reference Link' .'</label>'; 
     echo '<input type="text" id="reference-link" name="post_reference_link" placeholder="http://www.example.com/" value="'.$link_value.'" size="25"/>'; 
     echo '<p class="howto">'. 'Add the link of the reference' .'</p>'; 

     // my checkboxes 

     echo '<input type="checkbox" name="entry[0]" value="moredata">'; 
     echo '<input type="checkbox" name="entry[1]" value="moredata">'; 
     echo '<input type="checkbox" name="entry[2]" value="moredata">'; 
     echo '<input type="checkbox" name="entry[3]" value="moredata">'; 
     echo '<input type="checkbox" name="entry[4]" value="moredata">'; 



    } 

    function save_post_reference($post_id) { 
     if (! current_user_can('edit_post', $post_id)) { 
      return; 
     } 

     if (! isset($_POST['reference_nonce'])) { 
      return; 
     } 
     if (! wp_verify_nonce($_POST['reference_nonce'], 'reference_meta_box')) { 
      return; 
     } 

     if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { 
      return; 
     } 

     if (! isset($_POST['post_reference_name']) || ! isset($_POST['post_reference_link'])) { 
      return; 
     } 

     $reference_name = sanitize_text_field($_POST['post_reference_name']); 
     $reference_link = sanitize_text_field($_POST['post_reference_link']); 

     // looping through the checkboxes 

     for ($i = 0; $i < 5; $i++) { 
      $teachers_names = sanitize_text_field($_POST['entry'][$i]); 
     } 

     update_post_meta($post_id, '_post_reference_name', $reference_name); 
     update_post_meta($post_id, '_post_reference_link', $reference_link); 

다시, 여기에 무엇을 넣을까요?

 update_post_meta($post_id, 'whatdoIputhere?', $teachers_names); // what do I put here? 

    } 

    add_action('save_post', 'save_post_reference'); 

아무도 도와 주실 수 없습니까? 이제

key = 'entry'; 
$values_to_save = array(); 
$new_values = $_POST['entry']; 
$existing_values = get_post_meta($post_id, $key, true) ; 

if(!empty($existing_values)){ 
    foreach((array) $existing_values as $existing_value){ 
     $values_to_save[] = $existing_value; 
    } 
} 


if(!empty($new_values)){ 
    foreach((array) $new_values as $new_value){ 
     $values_to_save[] = $new_value ; 
    } 
} 

update_post_meta($post_id, $key, $values_to_save); 

데이터가 아래의 코드를 사용 가져올 :

$key = 'entry'; 
$values = get_post_meta($post_id, $key, true); 

foreach((array) $values as $value){ 
    echo $value . '<br>'; 
} 
+0

간단한 메타 키 ..... 데이터를 가져 오려면 'get_post_meta ($ post_ID,'your key ', true);'를 사용하고 데이터를 가져 오려면 update_post_meta ($ post_id, 'your key', $ teachers_names);를 그것을 저장하십시오 –

+0

나는 처음으로 두 사람은 다음과 같은 입력 필드의 이름을 사용하는 참조하십시오 : 'update_post_meta ($ post_id, '_post_reference_name', $ reference_name); 메타 키가 정확히 무엇인지 알아 내려는 중입니다. update_post_meta ($ post_id, '_post_reference_link', $ reference_link); ' 여기에'항목 [] '을 입력했으나 저장하지 않습니다. 'update_post_meta ($ post_id, 'entry []', $ teachers_names); ' 여기에 더 많은 빛을 비춰 주시겠습니까? – oneday

+0

'update_post_meta ($ post_id, 'entry', $ teachers_names)'충분하다. –

답변

0

귀하의 HTML 코드가 있어야한다 , 귀하의 코드로 내 기능을 업데이 트하고 이것은 지금 보이는 방법입니다 :

function add_post_reference() { 
    add_meta_box('post-reference', 'Reference', 'referenceCallBack', 'languagecourses', 'side', 'high'); 
} 
add_action('add_meta_boxes', 'add_post_reference'); 

// callback 

function referenceCallBack($post) { 
    wp_nonce_field('reference_meta_box', 'reference_nonce'); 

    $name_value = get_post_meta($post->ID, '_post_reference_name', true); 
    $link_value = get_post_meta($post->ID, '_post_reference_link', true); 

    $key = 'entry'; 
    $values = get_post_meta($post_id, $key, true); 

    foreach((array) $values as $value){ 
     echo $value . '<br>'; 
    } 

    echo '<label for="reference-name">'. 'Reference Name' .'</label>'; 
    echo '<input type="text" id="reference-name" name="post_reference_name" placeholder="Example" value="'.$name_value.'" size="25"/>'; 
    echo '<p class="howto">'. 'Add the name of the reference' .'</p>'; 

    echo '<label for="reference-link">'. 'Reference Link' .'</label>'; 
    echo '<input type="text" id="reference-link" name="post_reference_link" placeholder="http://www.example.com/" value="'.$link_value.'" size="25"/>'; 
    echo '<p class="howto">'. 'Add the link of the reference' .'</p>'; 

    echo '<input type="checkbox" name="entry[]" value="moredata">'; 
    echo '<input type="checkbox" name="entry[]" value="moredata">'; 
    echo '<input type="checkbox" name="entry[]" value="moredata">'; 
    echo '<input type="checkbox" name="entry[]" value="moredata">'; 
    echo '<input type="checkbox" name="entry[]" value="moredata">'; 
} 

function save_post_reference($post_id) { 
    if (! current_user_can('edit_post', $post_id)) { 
     return; 
    } 

    if (! isset($_POST['reference_nonce'])) { 
     return; 
    } 
    if (! wp_verify_nonce($_POST['reference_nonce'], 'reference_meta_box')) { 
     return; 
    } 

    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { 
     return; 
    } 

    if (! isset($_POST['post_reference_name']) || ! isset($_POST['post_reference_link'])) { 
     return; 
    } 

    $reference_name = sanitize_text_field($_POST['post_reference_name']); 
    $reference_link = sanitize_text_field($_POST['post_reference_link']); 

    $key = 'entry'; 
    $values_to_save = array(); 
    $new_values = $_POST['entry']; 
    $existing_values = get_post_meta($post_id, $key, true) ; 

    if(!empty($existing_values)){ 
     foreach((array) $existing_values as $existing_value){ 
      $values_to_save[] = $existing_value; 
     } 
    } 

    if(!empty($new_values)){ 
     foreach((array) $new_values as $new_value){ 
      $values_to_save[] = $new_value ; 
     } 
    } 

    update_post_meta($post_id, $key, $values_to_save); 

    update_post_meta($post_id, '_post_reference_name', $reference_name); 
    update_post_meta($post_id, '_post_reference_link', $reference_link); 
} 

add_action('save_post', 'save_post_reference'); 

내가 바꾸는 한 가지는 key =에서 $key =까지입니다. 그렇지 않으면 오류가 발생했습니다.

그리고 여전히 변화가 없습니다 ... 제가 생각한 한 가지는 아마도 데이터를 저장하지만 체크 박스는 선택하지 않은 채로 남았을 것입니다.

+0

그것을 작동시키려는 시도, 하나의 질문 -'key = 'entry'대신에'$ key = 'entry'; – oneday

+0

경고 : 경고 : foreach()에서 잘못된 인수가 제공되었습니다.] 배열이 아닌 데이터를 foreach에 제공하면이 문제가 발생합니다. http://stackoverflow.com/questions/2630013/invalid-argument-supplied-for-foreach – oneday

+0

답변을 ... 업데이트했습니다. –

0

확인을하여 데이터를 저장합니다 지금

echo '<input type="checkbox" name="entry[]" value="moredata">'; 
    echo '<input type="checkbox" name="entry[]" value="moredata">'; 
    echo '<input type="checkbox" name="entry[]" value="moredata">'; 
    echo '<input type="checkbox" name="entry[]" value="moredata">'; 
    echo '<input type="checkbox" name="entry[]" value="moredata">'; 

: 같은