2012-11-05 69 views
1

添加下面的腳本到function.php文件中的WordPress:默認爲「默認」的選項不起作用

add_action('add_meta_boxes', 'rating_select_box'); 
function rating_select_box() { 
    add_meta_box(
     'rating_select_box', // id, used as the html id att 
     __('Select rating:'), // meta box title, like "Page Attributes" 
     'rating_select_cb', // callback function, spits out the content 
     'post', // post type or page. We'll add this to posts only 
     'side', // context (where on the screen 
     'low' // priority, where should this go in the context? 
    ); 

} 

function rating_select_cb($post) 
{ 
    global $wpdb; 
    $value = get_post_meta($post->ID, 'rating', true); 
    echo '<div class="misc-pub-section misc-pub-section-last"> 
     <span id="timestamp">' 
     . '<label>Select a rating:<br></label>'; 

     $selected = ($value == $result->post_name) ? ' selected="selected" ' : null; 

     echo '<select name="rating">'; 
     echo '<option value="" default="default"> None... </option>'; 
     echo '<option value="0" '.$selected.'> G — Suitable for all audiences </option>'; 
     echo '<option value="1" '.$selected.'> PG — Possibly offensive, usually for audiences 13 and above </option>'; 
     echo '<option value="2" '.$selected.'> R — Intended for adult audiences above 17 </option>'; 
     echo '<option value="3" '.$selected.'> X — Even more mature than above </option>'; 
     echo '</select>';  

    echo '</span></div>'; 
} 

add_action('save_post', 'save_metadata'); 

function save_metadata($postid) 
{ 
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return false; 
    if (!current_user_can('edit_page', $postid)) return false; 
    if(empty($postid)) return false; 


    if (is_null($_REQUEST["rating"])) { 
     delete_post_meta($postid, 'rating'); 
    } else { 
     update_post_meta($postid, 'rating', $_REQUEST['rating']); 
    } 

} 

將在帖子頁面添加框下拉列表。我希望默認選項爲None...,所以我在該選項中添加了default="default",但它不起作用。默認情況下,選擇最高數字值,在這種情況下,它是X — Even more mature than above

我做錯了什麼?我怎麼能這樣做,以便默認選擇None...選項?

回答

3

select列表中,正確的方法爲「選擇」的選項與selected="selected",不default="default"。改變你的「無」選項,下面應該修復它:

echo '<option value="" selected="selected"> None... </option>'; 

但是,你不能動態地創建select列表,你只是輸出的完整列表,你會遇到選擇等問題值也是。爲了解決這個問題,如果選項不會改變,你可以把它們放在一個數組中循環。你可以用下面的新代碼修改rating_select_cb()的方法來實現這一目標:

function rating_select_cb($post) { 
    global $wpdb; 
    $value = get_post_meta($post->ID, 'rating', true); 
    echo '<div class="misc-pub-section misc-pub-section-last"><span id="timestamp"><label>Select a rating:<br></label>'; 

    // build an array of each available rating 
    $ratings = array(
     1 => 'G — Suitable for all audiences', 
     2 => 'PG — Possibly offensive, usually for audiences 13 and above', 
     3 => 'R — Intended for adult audiences above 17', 
     4 => 'X — Even more mature than above' 
    ); 

    echo '<select name="rating">'; 
    echo '<option value=""' . ((($value == '') || !isset($ratings[$value])) ? ' selected="selected"' : '') . '> None... </option>'; 

    // output each rating as an option 
    foreach ($ratings as $id => $text) { 
     echo '<option value="' . $id . '"' . (($value == $id) ? ' selected="selected"' : '') . '">' . $text. '</option>'; 
    } 
    echo '</select>'; 

    echo '</span></div>'; 
} 

這種方法默認 - 選擇了「無」選項,如果選擇$value不是收視率的可用列表。之後,它將循環顯示每個評級並將其輸出爲選項。如果評分$id與選定的$value匹配,則它將被標記爲選中。

+0

您能否詳細說明我將在哪裏添加此代碼示例?如果您可以友好地將其與我的原始代碼的其餘部分一起發佈... –

+0

感謝您的更新,請允許我幾分鐘測試此代碼並查看它的功能。將很快回報 –

+0

我剛剛測試過,這裏是結果。默認情況下,選擇值爲0,即** G - 適用於所有受衆**。也許在你的代碼中有一個錯字?你有什麼線索,爲什麼它不工作?編輯:也許**沒有... **應該是值0? –

2

你應該使用這樣的:

echo '<option value="" selected="selected"> None... </option>'; 
+0

只要doctype不是XHTML或XML,''option value =「」selected>'也是完全有效的。 –

+0

doctype在這裏是XHTML :)謝謝你的迴應,將測試它,如果它的工作,我會接受它是正確的。 –

+0

@ChrisSobolewski問題,這個工作,但無選項保持選中,即使用戶已經用不同的選項保存帖子...使這個解決方案無法使用。 –