撰寫外掛時有時候需要提供額外的自訂值,一般位置會選在左側選單的「設定」裡面,去增加一個子選單比較直覺、也方便找到位置。
內容大綱
Step.1 將子選單頁面加到設定的選單下
我們要建立自己的功能設定頁面,就必須「建立一個路徑」好方便點選進入,方法是管理選單載入之前就要寫進去,所以切入點是 admin_menu。
do_action( ‘admin_menu’, string $context )
Step.2 使用函數 add_options_page 將相關參數傳入
add_options_page( string $page_title, string $menu_title, string $capability, string $menu_slug, callable $function = ”, int $position = null )
其中參數 $capability 是設定哪一種角色能使用這個功能,$menu_slug 要注意不要重複到別人設定過的名稱。
Step.3 在 options table 建立一個記錄
register_setting( string $option_group, string $option_name, array $args = array() )
以上步驟我們整理一下程式碼:
add_action( 'admin_menu', 'add_my_option_menu');
function add_my_option_menu(){
add_options_page( 'page_title' , 'menu_title' , 'administrator' , 'sig_plugin_option_slug' , 'sig_plugin_option_page' );
add_action( 'admin_init', function(){
register_setting( 'my_options_group', 'my_options_name' );
});
}
Step.4 在頁面設計一個表單
基本上就是一個 form 的 html 語法,其中要提一下函數 settings_fields,會利用一些 type=hidden 來處理表單的安全性。
<?php
function sig_plugin_option_page() {
$options = get_option('my_options_name');
?>
<div class="wrap">
<form action="options.php" method="post">
<?php settings_fields('my_options_group'); ?>
<table class="form-table">
<tbody>
<tr>
<th scope="row">文字內容</th>
<td>
項目一 <input type="text" name="my_options_name[opt1]" value="<?php if(!empty($options['opt1'])) echo $options['opt1']; ?>">
</td>
</tr>
<tr>
<th scope="row">複選框</th>
<td>
<input type="checkbox" name="my_options_name[opt2]" value="2" <?php if(!empty($options['opt2'])) checked( $options['opt2'], "2" ); ?>> 項目二
<input type="checkbox" name="my_options_name[opt3]" value="3" <?php if(!empty($options['opt3'])) checked( $options['opt3'], "3" ); ?>> 項目三
</td>
</tr>
<tr>
<th scope="row">選項按鈕</th>
<td>
<input type="radio" name="my_options_name[opt4]" value="4" <?php if(!empty($options['opt4'])) checked( $options['opt4'], "4" ); ?>> 項目四
<input type="radio" name="my_options_name[opt5]" value="5" <?php if(!empty($options['opt5'])) checked( $options['opt5'], "5" ); ?>> 項目五
<input type="radio" name="my_options_name[opt6]" value="6" <?php if(!empty($options['opt6'])) checked( $options['opt6'], "6" ); ?>> 項目六
</td>
</tr>
<tr>
<th scope="row">下拉選單</th>
<td>
<select name="my_options_name[opt7]">
<option> -- </option>
<option value="AA" <?php if(!empty($options['opt7'])) selected( $options['opt7'], "AA" ); ?>>項目七</option>
<option value="BB" <?php if(!empty($options['opt7'])) selected( $options['opt7'], "BB" ); ?>>項目八</option>
</select>
</td>
</tr>
</tbody>
</table>
<?php submit_button(); ?>
</form>
</div>
<?php
}
?>
除了一般表單欄位外,之後會再繼續介紹一些特別的欄位,方便我們進階的編輯。
發佈留言