2013-10-18 58 views
0

對於我的Wordpress插件選項頁面,我想使用複選框來設置選項。我正在使用此代碼將其添加到選項頁面,並且運行良好。除此之外,我希望複選框默認設置爲未選中狀態。我該怎麼做呢?複選框默認未選中

public function id_number_callback() 
{ 
printf(
'<input id="%1$s" name="cus_func_option[%1$s]" type="checkbox" %2$s" />', 
'add_image_dimesions', 
checked(isset($this->options['add_image_dimesions']), true, false) 
); 

編輯:完整的代碼我想用的是這個

class MySettingsPage 
{ 
/** 
* Holds the values to be used in the fields callbacks 
*/ 
private $options; 

/** 
* Start up 
*/ 
public function __construct() 
{ 
    add_action('admin_menu', array($this, 'add_plugin_page')); 
    add_action('admin_init', array($this, 'page_init')); 
} 

/** 
* Add options page 
*/ 
public function add_plugin_page() 
{ 
    // This page will be under "Settings" 
    add_options_page(
     'Settings Admin', 
     'Custom functions', 
     'manage_options', 
     'cus-func-admin', 
     array($this, 'create_admin_page') 
    ); 
} 

/** 
* Options page callback 
*/ 
public function create_admin_page() 
{ 
    // Set class property 
    $this->options = get_option('cus_func_option'); 
?> 
<div class="wrap"> 
    <?php screen_icon(); ?> 
    <h2>Custom Functions</h2>   
    <form method="post" action="options.php"> 
    <?php 
     // This prints out all hidden setting fields 
     settings_fields('cus_func_group'); 
     do_settings_sections('cus-func-admin'); 
     submit_button(); 
    ?> 
    </form> 
</div> 
<?php 
} 

/** 
* Register and add settings 
*/ 
public function page_init() 
{   
    register_setting(
     'cus_func_group', // Option group 
     'cus_func_option', // Option name 
     array($this, 'sanitize') // Sanitize 
    ); 

    add_settings_section(
     'setting_section_id', // ID 
     'Which Custom Functions do you want to use?', // Title 
     array($this, 'print_section_info'), // Callback 
     'cus-func-admin' // Page 
    ); 

    add_settings_field(
     'add_image_dimesions', // ID 
     'Add image dimesions to the Media Page', // Title 
     array($this, 'id_number_callback'), // Callback 
     'cus-func-admin', // Page 
     'setting_section_id' // Section   
    );  

    add_settings_field(
     'title', 
     'Title', 
     array($this, 'title_callback'), 
     'cus-func-admin', 
     'setting_section_id' 
    );  
} 

/** 
* Sanitize each setting field as needed 
* 
* @param array $input Contains all settings fields as array keys 
*/ 
public function sanitize($input) 
{ 
    $new_input = array(); 
    if(isset($input['add_image_dimesions'])) 
     $new_input['add_image_dimesions'] = absint($input['add_image_dimesions']); 

    if(isset($input['title'])) 
     $new_input['title'] = sanitize_text_field($input['title']); 

    return $new_input; 
} 

/** 
* Print the Section text 
*/ 
public function print_section_info() 
{ 
    print 'Pick your Custom Functions below:'; 
} 

/** 
* Get the settings option array and print one of its values 
*/ 
public function id_number_callback() 
{ 


    printf(
     '<input id="%1$s" name="cus_func_option[%1$s]" type="checkbox" %2$s" />', 
'add_image_dimesions', 
checked(isset($this->options['add_image_dimesions']), true, false) 
); 

} 

/** 
* Get the settings option array and print one of its values 
*/ 
public function title_callback() 
{ 


printf(
     '<input id="%1$s" name="cus_func_option[%1$s]" type="checkbox" %2$s />', 
'title', 
checked(isset($this->options['title']), true, false) 
); 


} 
} 

if(is_admin()) 
$my_settings_page = new MySettingsPage(); 
+1

代碼按預期工作。首次加載自定義頁面時,複選框爲「未選中」。如果我們選中/取消選中並保存,則可以保存。我看不出有什麼問題。 (?) – brasofilo

+0

恐怕你是對的。我只是把它安裝在一個新的網站上,而且複選框確實是空的。也許還有一些保存的數據來自以前的試驗。但至少它讓我更瞭解整個事情,儘管我再次陷入困境。請期待我的下一個問題。越來越接近我的目標,並且樂於更多地瞭解WP插件。 – WendiT

+1

你會在[wordpress.se]找到更多的插件開發者。標籤[**''**](http://wordpress.stackexchange.com/questions/tagged/plugin-development?sort=frequent&pageSize=50)有一些相當不錯的材料。 – brasofilo

回答

0

參考WordPress Documentation for checked

什麼是isset($this->options['add_image_dimesions'])在你的代碼的價值?

這是什麼決定它是否被檢查。

+0

是的,我試過這個,但是當我想檢查複選框並保存時,該框再次被取消選中。 – WendiT

+0

$ this-> options ['add_image_dimensions']的值是什麼? –

+0

請參閱上面的完整代碼。感謝您看這個。 – WendiT

0

如果你想在加載頁面時,該複選框以總是不被選中,那麼你可以刪除第二個printf令牌,%2$2,第二個參數的printf,checked(isset($this->options['add_image_dimesions']), true, false),這將給你:

public function id_number_callback() 
{ 
printf(
'<input id="%1$s" name="cus_func_option[%1$s]" type="checkbox" />', 
'add_image_dimesions' 
); 
+0

與cale_b相同,當我勾選並保存它時,框會再次取消選中(而我現在使用的代碼在保存後會留下勾號,並在保存未勾選框後刪除勾號。 – WendiT