2017-06-01 271 views
1

我的插件是關於將常見問題添加到您想要的頁面。
Wordpress Meta Box表格數據不保存

  1. 我在'添加新問題'的元框中添加了一個表單。
  2. 當我在窗體中輸入值時,窗體數據在數據庫中確實保存在 中,但不保留或顯示頁面更新/發佈時的窗體值(選定) 。

  3. 而是,窗體顯示以前的非選定值(即使數據庫中顯示的選定值爲 )。


<?php 

function faq_manage_things($post) 
{ 

global $post; 
$post_id= $post->ID; 
wp_nonce_field(basename(__FILE__),'faqs_questions_nonce'); 
$faq_stored_meta= get_post_meta($post->ID); 

?> 
    <div class="wrap"> 
    <p> 
     <label for="meta-select" class="prfx-row-title"><?php _e('Example Select Input', 'prfx-textdomain')?></label> 
      <select name="meta-select" id="meta-select"> 
       <option value="select-one" <?php if (isset ($prfx_stored_meta['meta-select'])) selected($prfx_stored_meta['meta-select'][0], 'select-one'); ?>><?php _e('One', 'prfx-textdomain')?></option>'; 
       <option value="select-two" <?php if (isset ($prfx_stored_meta['meta-select'])) selected($prfx_stored_meta['meta-select'][0], 'select-two'); ?>><?php _e('Two', 'prfx-textdomain')?></option>'; 
      </select> 
    </p> 

    <!-- TEXT AREA --> 

    <p> 
     <label for="meta-textarea" class="prfx-row-title"><?php _e('Example Textarea Input', 'prfx-textdomain')?></label> 
     <textarea name="meta-textarea" id="meta-textarea"><?php if (isset ($prfx_stored_meta['meta-textarea'])) echo $prfx_stored_meta['meta-textarea'][0]; ?></textarea> 
    </p> 


     <!-- CHECKBOXES --> 

    <p> 
     <span class="prfx-row-title"><?php _e('Example Checkbox Input', 'prfx-textdomain')?></span> 
      <div class="prfx-row-content"> 
       <label for="meta-checkbox"> 
        <input type="checkbox" name="meta-checkbox" id="meta-checkbox" value="yes" <?php if (isset ($prfx_stored_meta['meta-checkbox'])) checked($prfx_stored_meta['meta-checkbox'][0], 'yes'); ?> /><?php _e('Checkbox label', 'prfx-textdomain')?> 
       </label> 
       <label for="meta-checkbox-two"> 
        <input type="checkbox" name="meta-checkbox-two" id="meta-checkbox-two" value="yes" <?php if (isset ($prfx_stored_meta['meta-checkbox-two'])) checked($prfx_stored_meta['meta-checkbox-two'][0], 'yes'); ?> /><?php _e('Another checkbox', 'prfx-textdomain')?> 
       </label> 
      </div> 
    </p> 


    </div> 
<?php 
} 

global $post; 
function faq_meta_save($post_id) { 
    global $post; 
    $post_id= $post->ID; 
    $is_autosave = wp_is_post_autosave($post_id); 
    $is_revision = wp_is_post_revision($post_id); 
    $is_valid_nonce = (isset($_POST[ 'faqs_questions_nonce' ]) && wp_verify_nonce($_POST['faqs_questions_nonce'],basename(__FILE__)))? 'true' : 'false'; 


    if ($is_autosave || $is_revision || !$is_valid_nonce) 
     {return;} //exit 

    if(isset($_POST[ 'meta-select' ])) 
     { update_post_meta($post_id, 'meta-select', $_POST[ 'meta-select' ]); } 

    if(isset($_POST[ 'meta-textarea' ])) { 
     update_post_meta($post_id, 'meta-textarea', sanitize_text_field($_POST[ 'meta-textarea' ])); } 

    // Checks for input and saves 
    if(isset($_POST[ 'meta-checkbox' ])) { 
     update_post_meta($post_id, 'meta-checkbox', 'yes');} 
    else { 
     update_post_meta($post_id, 'meta-checkbox', ''); } 

    // Checks for input and saves 
    if(isset($_POST[ 'meta-checkbox-two' ])) { 
     update_post_meta($post_id, 'meta-checkbox-two', 'yes');} 
    else { 
     update_post_meta($post_id, 'meta-checkbox-two', ''); } 

    } 

    add_action('save_post','faq_meta_save'); 

回答

0

你必須檢查,如果你有在數據庫中複製了相同的POST_ID meta_key。另外,我建議你在meta_key名稱中使用下劃線而不是連字符。試試這個代碼post_id的meta_data被刪除,然後添加新的值。

試試這個:

<?php 

function faq_manage_things($post) 
{ 

    global $post; 
    $post_id= $post->ID; 
    wp_nonce_field(basename(__FILE__),'faqs_questions_nonce'); 
    $faq_stored_meta= get_post_meta($post->ID); 

    ?> 
    <div class="wrap"> 
     <p> 
      <label for="meta-select" class="prfx-row-title"><?php _e('Example Select Input', 'prfx-textdomain')?></label> 
      <select name="meta-select" id="meta-select"> 
       <option value="select-one" <?php if (isset ($prfx_stored_meta['meta_select'])) selected($prfx_stored_meta['meta_select'][0], 'select-one'); ?>><?php _e('One', 'prfx-textdomain')?></option>'; 
       <option value="select-two" <?php if (isset ($prfx_stored_meta['meta_select'])) selected($prfx_stored_meta['meta_select'][0], 'select-two'); ?>><?php _e('Two', 'prfx-textdomain')?></option>'; 
      </select> 
     </p> 

     <!-- TEXT AREA --> 

     <p> 
      <label for="meta-textarea" class="prfx-row-title"><?php _e('Example Textarea Input', 'prfx-textdomain')?></label> 
      <textarea name="meta-textarea" id="meta-textarea"><?php if (isset ($prfx_stored_meta['meta_textarea'])) echo $prfx_stored_meta['meta_textarea'][0]; ?></textarea> 
     </p> 


     <!-- CHECKBOXES --> 

     <p> 
      <span class="prfx-row-title"><?php _e('Example Checkbox Input', 'prfx-textdomain')?></span> 
      <div class="prfx-row-content"> 
       <label for="meta-checkbox"> 
        <input type="checkbox" name="meta-checkbox" id="meta-checkbox" value="yes" <?php if (isset ($prfx_stored_meta['meta_checkbox'])) checked($prfx_stored_meta['meta_checkbox'][0], 'yes'); ?> /><?php _e('Checkbox label', 'prfx-textdomain')?> 
       </label> 
       <label for="meta-checkbox-two"> 
        <input type="checkbox" name="meta-checkbox-two" id="meta-checkbox-two" value="yes" <?php if (isset ($prfx_stored_meta['meta_checkbox_two'])) checked($prfx_stored_meta['meta_checkbox_two'][0], 'yes'); ?> /><?php _e('Another checkbox', 'prfx-textdomain')?> 
       </label> 
      </div> 
     </p> 


    </div> 
    <?php 
} 

global $post; 


function faq_meta_save($post_id) { 
    global $post; 
    $post_id= $post->ID; 
    $is_autosave = wp_is_post_autosave($post_id); 
    $is_revision = wp_is_post_revision($post_id); 
    $is_valid_nonce = (isset($_POST[ 'faqs_questions_nonce' ]) && wp_verify_nonce($_POST['faqs_questions_nonce'],basename(__FILE__)))? 'true' : 'false'; 


    if ($is_autosave || $is_revision || !$is_valid_nonce) 
     {return;} //exit 

    if(isset($_POST[ 'meta-select' ])) { 
     remove_post_meta($post_id, 'meta_select', $_POST[ 'meta-select' ]); 
     add_post_meta($post_id, 'meta_select', $_POST[ 'meta-select' ]); 
    } 

    if(isset($_POST[ 'meta-textarea' ])) { 
     remove_post_meta($post_id, 'meta_textarea', sanitize_text_field($_POST[ 'meta-textarea' ])); 
     add_post_meta($post_id, 'meta_textarea', sanitize_text_field($_POST[ 'meta-textarea' ])); 
    } 

    // Checks for input and saves 
    if(isset($_POST[ 'meta-checkbox' ])) { 
     remove_post_meta($post_id, 'meta_checkbox', 'yes'); 
     add_post_meta($post_id, 'meta_checkbox', 'yes'); 
    } 
    else { 
     remove_post_meta($post_id, 'meta_checkbox'); 
    } 

    // Checks for input and saves 
    if(isset($_POST[ 'meta-checkbox-two' ])) { 
     remove_post_meta($post_id, 'meta_checkbox-two', 'yes'); 
     add_post_meta($post_id, 'meta_checkbox-two', 'yes'); 
    } 
    else { 
     remove_post_meta($post_id, 'meta_checkbox-two'); 
    } 
} 
add_action('save_post','faq_meta_save'); 
+0

的幫助以及感謝!但是這個小型*炸彈*並沒有保存上面$ prfx_stored_meta的元值。所以一旦我做到了,它就完美無缺 – amna