首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

WordPress 選項讀取與主題設置頁面:get_option() 進階技巧與 add_theme_page() 實戰

     編輯:PHP 綜合知識

主題開發中,get_option() 是從 wp_options 表讀取設定的核心函數,而 add_theme_page() 是在「外觀」選單下快速添加主題設置頁的捷徑。本文分享兩個函數的進階用法與最佳實踐組合拳。

get_option() 進階技巧:默認值優雅處理

寫法一:手動判斷初始化(舊式)

if ( ! get_option('xiangzi') ) {
    $default = array( 'title'=>'博客', 'name'=>'翔子', 'url'=>'pangbu.com' );
    update_option('xiangzi', $default);
}
$xiangzi = get_option('xiangzi');

寫法二:利用第二參數直接指定默認值(推薦,WP 內建支援)

$default = array( 'title'=>'博客', 'name'=>'翔子', 'url'=>'pangbu.com' );
$xiangzi = get_option( 'xiangzi', $default );

第二參數僅在選項不存在時返回,不會寫入數據庫。若需持久化默認值,仍需配合 update_option() 在主題啟用鉤子 after_setup_theme 中初始化。

add_theme_page():零成本添加主題設置入口

不同於 add_menu_page() 創建頂級選單,add_theme_page() 直接將頁面掛載在「外觀」→「主題設置」下,符合用戶預期,無需管理位置參數。

函數簽名

<?php
add_theme_page(
    $page_title,   // 頁面 title
    $menu_title,   // 子選單文字
    $capability,   // 權限(通常用 edit_theme_options)
    $menu_slug,    // 唯一 slug
    $function      // 渲染回調
);
?>

完整實戰代碼

<?php
function xz_theme_options_add_page() {
    add_theme_page(
        '主題設置',           // page_title
        '主題設置',           // menu_title
        'edit_theme_options', // capability
        'theme_options',      // menu_slug
        'xz_theme_op_page'    // callback
    );
}
function xz_theme_op_page() {
    // 這裡輸出設定表單 HTML,配合 get_option() 讀取值
    echo '<div class="wrap"><h1>主題設置頁面</h1></div>';
}
add_action( 'admin_menu', 'xz_theme_options_add_page' );
?>

主題設置選單效果

最佳實踐組合:Settings API + add_theme_page()

雖然可直接在回調中輸出 <form>,但強烈建議使用 **Settings API**(register_setting()、add_settings_section()、add_settings_field())實現:

  • 自動處理 Nonce 驗證、權限檢查、數據清洗
  • 統一欄位渲染,支援核心 UI 樣式
  • 易於擴展、維護、國際化

避坑提醒

  • get_option() 返回值可能是序列化字串,**切勿直接 unserialize()**,WP 內部已自動反序列化
  • 選項名建議加前綴(如 mytheme_)防止衝突
  • 大量選項時,考慮打包成單一陣列選項(mytheme_options),減少數據庫查詢

掌握 get_option() 默認值技巧與 add_theme_page() 快速接入,讓主題設置開發事半功倍,專注於業務邏輯而非樣板代碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved