2015-11-29 61 views
1

我已經在wordpress插件中創建了自定義帖子類型。在自定義文章類型中,是一些自定義元文件 - 在我的自定義元文件中,我有一個無線電輸入。WordPress的自定義帖子類型保存無線電輸入元

我遇到的問題是將此無線電輸入的選擇保存到數據庫中。每當我點擊保存,它就會忘記選擇。

這是我爲我的metaboxes代碼:

function render_meta_boxes($post) { 

    $meta = get_post_custom($post->ID); 
    $name = ! isset($meta['singer_name'][0]) ? '' : $meta['singer_name'][0]; 
    $tagline = ! isset($meta['singer_tagline'][0]) ? '' : $meta['singer_tagline'][0]; 
    $bio = ! isset($meta['singer_bio'][0]) ? '' : $meta['singer_bio'][0]; 
    $gender = ! isset($meta['singer_gender'][0]) ? '' : $meta['singer_gender'][0]; 

    wp_nonce_field(basename(__FILE__), 'singer_profile'); 
?> 

    <table class="form-table"> 

     <tr> 
      <td class="singers_meta_box_td" colspan="2"> 
       <label for="singer_name"><?php _e('Singer Name', 'singers_post_type'); ?> 
       </label> 
      </td> 
      <td colspan="4"> 
       <input type="text" name="singer_name" class="regular-text" value="<?php echo $name; ?>"> 
      </td> 
     </tr> 

     <tr> 
      <td class="singers_meta_box_td" colspan="2"> 
       <label for="singer_tagline"><?php _e('Singer Tagline', 'singers_post_type'); ?> 
       </label> 
      </td> 
      <td colspan="4"> 
       <input type="text" name="singer_tagline" class="regular-text" value="<?php echo $tagline; ?>"> 
      </td> 
     </tr> 

     <tr> 
      <td class="singers_meta_box_td" colspan="2"> 
       <label for="singer_bio"><?php _e('Singer Bio', 'singers_post_type'); ?> 
       </label> 
      </td> 
      <td colspan="4"> 
       <textarea rows="10" style="width:25em;" name="singer_bio" class="regular-text"><?php echo $bio; ?></textarea> 
      </td> 
     </tr> 

     <tr> 
      <td class="singers_meta_box_td" colspan="2"> 
       <label for="singer_gender"><?php _e('Gender', 'singers_post_type'); ?> 
       </label> 
      </td> 
      <td colspan="4"> 
       <input type="radio" name="singer_gender" value="male"> Male<br> 
       <input type="radio" name="singer_gender" value="female"> Female 
      </td> 
     </tr> 

    </table> 

<?php } 

/** 
* Save metaboxes 
* 
* @since 0.1.0 
*/ 
function save_meta_boxes($post_id) { 

    global $post; 

    // Verify nonce 
    if (!isset($_POST['singer_profile']) || !wp_verify_nonce($_POST['singer_profile'], basename(__FILE__))) { 
     return $post_id; 
    } 

    // Check Autosave 
    if ((defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) || (defined('DOING_AJAX') && DOING_AJAX) || isset($_REQUEST['bulk_edit'])) { 
     return $post_id; 
    } 

    // Don't save if only a revision 
    if (isset($post->post_type) && $post->post_type == 'revision') { 
     return $post_id; 
    } 

    // Check permissions 
    if (!current_user_can('edit_post', $post->ID)) { 
     return $post_id; 
    } 

    $meta['singer_name'] = (isset($_POST['singer_name']) ? esc_textarea($_POST['singer_name']) : ''); 

    $meta['singer_bio'] = (isset($_POST['singer_bio']) ? esc_textarea($_POST['singer_bio']) : ''); 

    $meta['singer_tagline'] = (isset($_POST['singer_tagline']) ? esc_textarea($_POST['singer_tagline']) : ''); 

    $meta['singer_gender'] = (isset($_POST['singer_gender']) ? sanitize_html_class($_POST['singer_gender']) : ''); 

    foreach ($meta as $key => $value) { 
     update_post_meta($post->ID, $key, $value); 
    } 
} 

你可以看到無線輸入只是男性和女性的選項,然後在腳本的底部是在節省處理。我不知道如何做出選擇保存。

回答

0

好了,首先你沒有添加

add_action('save_post', 'save_meta_boxes'); 

但我假設你有一個,因爲其他選項(通過您的賬戶)應該被保存。

接下來我會寫我的變量在這樣的metabox:

$meta = get_post_custom($post->ID); 
$name = (isset($meta['singer_name'][0]) && $meta['singer_name'][0] != '') ? $meta['singer_name'][0] : ''; 
$tagline = (isset($meta['singer_tagline'][0]) && $meta['singer_tagline'][0] != '') ? $meta['singer_tagline'][0] : ''; 
$bio = (isset($meta['singer_bio'][0]) && $meta['singer_bio'][0] != '') ? $meta['singer_bio'][0] : ''; 
$gender = (isset($meta['singer_gender'][0]) && $meta['singer_gender'][0] != '') ? $meta['singer_gender'][0] : ''; 

我覺得這是更萬無一失。

你需要的是從數據庫中拉,看看你的無線選項(和同樣的問題也發生在複選框)選擇/檢查的值。所以,你的render_meta_boxes()函數中,後門柱的自定義變量添加:

現在
$value = get_post_meta($post->ID, 'gender-select', true); 

您的無線輸入必須看起來像

<td colspan="4"> 
    <input type="radio" name="singer_gender" value="male" <?php checked($value, 'male'); ?>> Male<br> 
    <input type="radio" name="singer_gender" value="female" <?php checked($value, 'female'); ?>> Female 
</td> 

在這裏你可以檢查在後的元價值是男是女,並根據你的那個單選按鈕進行檢查。

最後但並非最不重要的,你的保存功能應該有一個$post作爲參數,而不是$post_id

function save_meta_boxes($post) { 

    global $post; 
    $post_id = $post->ID; 
    ... 
} 

您應該保存包裝箱中取出$meta['singer_gender']因爲什麼都不做。而是使用:

$gender_meta_value = (isset($_POST['singer_gender']) ? sanitize_html_class($_POST['singer_gender']) : ''); 
update_post_meta($post_id, 'gender-select', $gender_meta_value); 

gender-select是在後元將在$value變量從中你會瓶坯的支票後拉到值。

就是這樣

相關問題