Skip to content

【第 10 天】如何修改 WordPress 的後台設置選項

Last updated on 2020 年 10 月 30 日

WordPress 為了使管理介面更容易被建立,並且確保安全和一致性 提供了兩個核心 API 給開發者使用,分別是設置 API 和選項 API。設置 API 被用來提供了一種創建選單和管理選單資料。選項 API 則是我們提供一種簡單的 key-value 方式來管理設置資料。

設置 API

為什麼使用設置 API

WordPress 2.7 之後增加的設置 API 可以讓我們半自動地管理含有設置表單的後台頁面,讓我們自定義設置頁面。讓我們可以輕輕鬆鬆的開發設置頁面。也就是說,我們使用 API 生成介面的元素後,可以確保我們的自定義設置頁面和WordPress 其他的管理介面一致,不會說每個外掛有每個不同的介面,這樣使用外掛的時候肯定很混亂!

如果今天我們創建了自己的設置頁面,WordPress 如果更新了,可能就會破壞我們的自定義設置,所以我們應該使用由 WordPress 核心提供的設置 API 來修改設置頁面。再來,使用 WordPress 設置 API,最直接的好處是,這隻 API 在底層默默的為我們做了很多工作,比如說可以讓我們獲得額外的安全措施、或者是自動為我們清理數據,我們可以省很多工。

使用設置 API

前面介紹了這麼多好處,不如來親自試看看設置 API 吧!

新增設置

我們可以使用 register_setting() 來註冊一個新的設置。此函式會協助我們在資料表({$wpdb->prefix}_options)中插入一條新的記錄。

register_setting(
    string $option_group, 
    string $option_name, 
    callable $sanitize_callback = ''
);

另外,我們可以使用 add_settings_section() 在現有設置頁面上添加新章節。

add_settings_section(
    string $id, 
    string $title, 
    callable $callback, 
    string $page
);

也可以使用 add_settings_field() 將字串新增到現有的章節上面。

章節是我們在 WordPress 設置頁面上看到的帶有同標題的設置群組。在外掛中,我們可以直接對著現有的設置頁面添加新章節,而不是創建一個新頁面。一來我們好維護,二來可以降低用戶的學習和使用成本

<?php
function eric_settings_init(){
   // 為 eric 頁面註冊一個新的設置
   register_setting('eric', 'eric_setting_name');

   // 在 eric 頁面上註冊新章節
   add_settings_section(
      'eric_settings_section',
      'Eric Settings Section',
      'eric_settings_section_cb',
      'reading'
   );

   // eric 頁面中,在 eric_settings_section 章節上註冊新設置
   add_settings_field(
      'eric_settings_field',
      'Eric Setting',
      'eric_settings_field_cb',
      'eric',
      'eric_settings_section'
   );
}
 
/**
 * 註冊 eric_settings_init 到 admin_init action hook 上面
 */
add_action('admin_init', 'eric_settings_init');
 

/**
 *  Callback function
 */
// 回傳章節內容
function wporg_settings_section_cb() {
   echo '<p>WPOrg Section Introduction.</p>';
}
 
// 回傳設定欄位
function wporg_settings_field_cb() {
   // 取得我們剛剛用 register_setting() 註冊的值
   $setting = get_option('eric_setting_name');
   // 輸出
   ?>
   <input type=text name=eric_setting_name value=<?php echo isset( $setting ) ? esc_attr( $setting ) : ''; ?>>
   <?php
}

取得設置

剛剛我們用到了 get_option() 函式,這邊說明一下這個韓式是做什麼用的,簡單來說就是我們可以用這個函式來獲取我們想要的設置資料。

get_option(
   string $option,
    mixed $default = false
);

選項 API

WordPress 1.0 中引入的選項 API 可以讓我們輕鬆的新增、讀取、更新和刪除 WordPress 選項,結合設置 API,我們可以控制設置頁面中的自定義選項。

選項在什麼地方保存?

選項會被存儲在 {$wpdb->prefix}_options 資料表中。

儲存方式

選項可以是單個值或者是陣列的形式存儲在 WordPress 資料表中。

保存為單個值的時候,選項值為單個字符串、整數等。

<?php
// 新增一個選項
add_option('eric_custom_option', 'hello world!');
// 取得選項
$option = get_option('eric_custom_option');

另外一種選項就是,如果我們需要保存大量選項,我們會把這些選項保存為陣列。

Published in2020鐵人賽WordPress

Be First to Comment

Leave a Reply

Your email address will not be published. Required fields are marked *