0%

正威網路行銷工作室,專注於基隆、台北與全台客製化網頁設計,提供專業 RWD 響應式、SEO 搜尋引擎優化、品牌形象設計與網站維護託管服務。

搜尋文章
聯絡資訊
地址基隆市仁二路 220 號 5 樓
追蹤我們

WordPress functions.php 實用程式碼整理:10 個常用又安全的小技巧

wordpress網頁語法教學,網頁跳轉語法

functions.php 是 WordPress 主題裡的一個檔案,可以用程式碼替網站加上小功能,很多時候不用為了一個小需求就裝一個外掛。

這篇是 2015 年版本的全面更新:原本收錄的程式碼有好幾段在新版 WordPress 或 PHP 8 上已經會讓網站直接當機,下面都換成現在可以安全使用的寫法,最後也列出被淘汰的舊程式碼與原因。

程式碼要放在哪裡?

不要直接改主題本身的 functions.php,主題一更新,你加的程式碼就會消失。建議用下面兩種方式之一:

  • 子主題(Child Theme)的 functions.php:適合熟悉主題結構的人。
  • Code Snippets 外掛:到後台「外掛 → 安裝外掛」搜尋 Code Snippets,每段程式碼可以單獨開關,寫錯了也比較好救。

寫錯了、網站變白畫面怎麼辦?

WordPress 5.2 之後有「復原模式」,網站出錯時會寄一封信到管理員信箱,照信裡的連結登入後台就能停用出錯的外掛或主題。收不到信的話,用 FTP 把剛才改的檔案換回備份,或把 Code Snippets 外掛的資料夾暫時改名,網站就會恢復。

1. 隱藏 WordPress 版本號

網頁原始碼預設會顯示 WordPress 的版本號,讓有心人知道你用的是哪個版本、有哪些已知漏洞:

PHP
remove_action( 'wp_head', 'wp_generator' );
add_filter( 'the_generator', '__return_empty_string' );

第二行連 RSS 裡的版本資訊也一起拿掉。更完整的做法請看真正隱藏去除 WordPress 版本號。

2. 限制文章修訂版本的數量

每次存檔 WordPress 都會留一份修訂版本,文章改久了資料庫會越來越大。這行要加在網站根目錄的 wp-config.php(不是 functions.php),放在「That's all, stop editing!」那一行的上面:

PHP
define( 'WP_POST_REVISIONS', 5 );

數字是每篇文章最多保留幾個版本。舊版文章寫成小寫的 wp_POST_REVISIONS,常數名稱要全部大寫才有作用。

3. 延後文章出現在 RSS 的時間

文章發佈後常常才發現錯字,但訂閱 RSS 的人已經收到了。這段讓文章發佈 10 分鐘後才出現在 RSS:

PHP
add_filter( 'posts_where', function ( $where, $query ) {
    global $wpdb;
    if ( $query->is_feed() ) {
        $where .= $wpdb->prepare(
            " AND {$wpdb->posts}.post_date_gmt < %s",
            gmdate( 'Y-m-d H:i:s', time() - 10 * MINUTE_IN_SECONDS )
        );
    }
    return $where;
}, 10, 2 );

把 10 * MINUTE_IN_SECONDS 改成 HOUR_IN_SECONDS 就是延後一小時。

4. 站內搜尋也搜得到自訂文章類型

WordPress 內建搜尋預設只找文章。如果網站有商品、作品集這類自訂文章類型,要加上:

PHP
add_action( 'pre_get_posts', function ( $query ) {
    if ( ! is_admin() && $query->is_main_query() && $query->is_search() ) {
        $query->set( 'post_type', array( 'post', 'page', 'product' ) );
    }
} );

array() 裡面換成你要搜尋的文章類型名稱(product 是 WooCommerce 的商品)。

5. RSS 也包含自訂文章類型

PHP
add_filter( 'request', function ( $vars ) {
    if ( isset( $vars['feed'] ) && ! isset( $vars['post_type'] ) ) {
        $vars['post_type'] = array( 'post', 'product' );
    }
    return $vars;
} );

6. 精簡後台首頁的小工具

後台「控制台」有很多用不到的區塊,交給客戶使用的網站常會拿掉一些,畫面比較清爽:

PHP
add_action( 'wp_dashboard_setup', function () {
    remove_meta_box( 'dashboard_primary', 'dashboard', 'side' );      // WordPress 活動及新聞
    remove_meta_box( 'dashboard_quick_press', 'dashboard', 'side' );  // 快速草稿
    remove_meta_box( 'dashboard_activity', 'dashboard', 'normal' );   // 近期動態
} );

7. 上傳的中文檔名自動改成日期

用中文檔名上傳圖片,網址會變成一長串編碼,有些主機或外掛還會出錯。這段會把含有中文等非英數字的檔名,自動改成日期加亂數:

PHP
add_filter( 'sanitize_file_name', function ( $filename ) {
    $info = pathinfo( $filename );
    $ext  = empty( $info['extension'] ) ? '' : '.' . strtolower( $info['extension'] );
    $name = $info['filename'];
    if ( preg_match( '/[^\x20-\x7E]/', $name ) ) {
        $name = gmdate( 'Ymd-His' ) . '-' . wp_rand( 100, 999 );
    }
    return $name . $ext;
} );

英文檔名維持不變。圖片的替代文字(alt)還是要記得用中文寫清楚,那才是搜尋引擎看的。

8. 關閉 XML-RPC

XML-RPC 是舊的遠端發文介面,現在很少用到,卻常被拿來暴力破解密碼:

PHP
add_filter( 'xmlrpc_enabled', '__return_false' );

注意:如果你有用 Jetpack 外掛,或用手機 App 發文,它們可能需要 XML-RPC,關閉前先確認。

9. 不載入 Emoji 程式

WordPress 會在每一頁載入一段 Emoji 轉換程式,現在的瀏覽器都能直接顯示 Emoji,可以省掉:

PHP
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
remove_action( 'wp_enqueue_scripts', 'wp_enqueue_emoji_styles' );
remove_action( 'admin_enqueue_scripts', 'wp_enqueue_emoji_styles' );

10. 登入頁的 Logo 連回自己的網站

後台登入頁的 Logo 預設連到 WordPress 官網,做給客戶的網站通常會改成連回首頁:

PHP
add_filter( 'login_headerurl', function () {
    return home_url( '/' );
} );

這些舊程式碼請不要再用

這篇文章 2015 年的版本收錄了下面幾段,現在都不建議使用:

  • 用 create_function() 開啟 GZIP 壓縮:create_function 在 PHP 8 已經移除,放進去網站會直接當機。壓縮請交給主機或 .htaccess 處理,做法請看網站 GZIP、Brotli 壓縮總整理。
  • 改從 Google 載入 jQuery 1.7.1:版本太舊有安全漏洞,而且會跟新版外掛衝突,請使用 WordPress 內建的 jQuery。
  • 圖片上傳時自動銳化:用的是舊的圖片處理函式,新版 WordPress 已經改寫圖片處理流程,這段不會正常運作。
  • 取消預設小工具(unregister_widget):原本的類別名稱大小寫寫錯了,實際上沒有作用;而且新版 WordPress 已改用區塊小工具。
  • 在「設定」選單加上「All Settings」:會打開所有底層設定,改錯一個值可能讓網站無法運作,不建議開放。

延伸閱讀

網站功能越加越多、程式碼越堆越亂的時候,整理一次往往比繼續補更省事。正威網路行銷是 25 年經驗的基隆網頁設計工作室,也提供網站維護託管,歡迎來聊聊。

分享這篇文章

返回文章列表更多「Wordpress代碼教學」文章

發表留言

還沒有人留言,歡迎第一個分享你的想法或問題。留言經審核後才會顯示,Email 不會公開。

讓我們一起打造
您的專屬網站!