問題描述

調用我很愚蠢,但我沒有弄清楚如何做到這一點。對於文本輸入,我只是:

<input type="text" name="option_name"  value="<?php echo get_option( 'option_name' ); ?>" />

然後使用 register_setting()將其掛接到 workdpress 中。我可以通過 get_option('option_name')獲得其價值。如何通過複選框和單選按鈕來做到這一點?

最佳解決方案

我傾向於存儲多個選項作為數組,所以我會有這樣的東西..

<?php $options = get_option( 'myoption' ); ?>
<input type="checkbox" name="myoption[option_one]" value="1"<?php checked( 1 == $options['option_one'] ); ?> />
<input type="checkbox" name="myoption[option_two]" value="1"<?php checked( 1 == $options['option_two'] ); ?> />

但是它確實取決於如何對傳入數據進行清理的回調函數處理保存的值 (應該將回調定義為 register_setting 的第三個參數) 。個人當我處理複選框時,我不設置數組鍵,其他人可能會選擇將鍵設置為 0(或代替)…)

所以我的代碼實際上看起來像這樣..

<?php $options = get_option( 'myoption' ); ?>
<input type="checkbox" name="myoption[option_one]" value="1"<?php checked( isset( $options['option_one'] ) ); ?> />
<input type="checkbox" name="myoption[option_two]" value="1"<?php checked( isset( $options['option_two'] ) ); ?> />

如果我只是處理複選框,我的消毒回調將看起來像

public function on_option_save( $options ) {
    if( !is_array( $options ) || empty( $options ) || ( false === $options ) )
        return array();

    $valid_names = array_keys( $this->defaults );
    $clean_options = array();

    foreach( $valid_names as $option_name ) {
        if( isset( $options[$option_name] ) && ( 1 == $options[$option_name] ) )
            $clean_options[$option_name] = 1;
        continue;
    }
    unset( $options );
    return $clean_options;
}

從我的一個插件類 (一個插件只有複選框選項) 直接翻轉,但它不是你可以期待工作的代碼,如果你複製,它只是為了説明只。

對於收音機,如果您不使用多種選擇,就會像這樣。

<?php $options = get_option( 'my_option' ); ?>
<input type="radio" name="myoption[option_three]" value="value1"<?php checked( 'value1' == $options['option_three'] ); ?> />
<input type="radio" name="myoption[option_three]" value="value2"<?php checked( 'value2' == $options['option_three'] ); ?> />

注意:在比較它的值之前,檢查鑰匙是否明智,我當然是明智的 (我已經把它從上面刪除了) 。

以上有幫助嗎?如果沒有,只是讓我知道什麼需要澄清…(或什麼我失蹤)..

RE:checked()

您可以在這裏找到功能定義的位置 (在 WordPress 中) 。 http://core.trac.wordpress.org/browser/tags/3.0.2/wp-includes/general-template.php#L2228

第一個參數基本上是一個條件語句,第二個參數 (如果你想定義它) 是要檢查的。要比較的默認值為 TRUE … 所以如果要做 checked( 1 == 1, true ),我會檢查 1 == 1 是否等於 true 。如果條件匹配,那麼你得到 checked="checked"返回給你..

注意:我在解釋事情時是垃圾,所以如果上述需要進一步澄清,我不會被冒犯… 只是讓我知道..)

次佳解決方案

複選框:

<input name="option_name" type="checkbox" value="1" <?php checked( '1', get_option( 'option_name' ) ); ?> />

無線電:

<input name="option_name" type="radio" value="0" <?php checked( '0', get_option( 'option_name' ) ); ?> />
<input name="option_name" type="radio" value="1" <?php checked( '1', get_option( 'option_name' ) ); ?> />

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。