WordPress Child Theme-子佈景修改實例2-cannot redeclare

承接子佈景-子主題-Child Theme修改實例1這篇文章,繼續修改佈景主題作為實例。一般比較常見的方法是編輯 style.css 和 function.php 這兩個檔案,增加需要的更新和功能。但有時候會要修改佈景作者自己寫的函式function,那該怎麼處理?


Child Theme的函式修正問題

因為 Hueman 的佈景在文章列表顯示圖片時,alt 沒有加上文字說明,這對 seo 是個缺點。所以我找到顯示圖片的函式 hu_the_post_thumbnail() 想要覆寫它。

先呆呆的直接在 function.php ,新增該同名函式,儲存,噹噹,報錯:函式名稱不能重覆宣告。

Cannot redeclare hu_the_post_thumbnail() (previously declared in wp-content/themes/hueman-child/functions.php:34)

正確覆寫子佈景函式的作法

參考這篇文章,覆寫原佈景函式的正確作法有三個:

pluggable functions

function priority

removing functions from the hook

可是呢,這些方法我試過都不行,google搜尋其它文章及stackoverflow論壇,也都是說這三個。仔細再去看 hu_the_post_thumbnail() 這函式才發現,原作沒給它任何插件pluggable、優先權priority和掛載hook,所以無法覆寫函式。


修改佈景檔案

沒辦法,只好去改佈景檔案。

到「工具」>「子佈景主題」>「檔案」,去選取並複製想要修改的檔案到子佈景主題。

可是,改程式總是有那麼多的可是,我想要改的檔案,沒有出現在上面。可能是因為每個佈景設計都有自己的一套作法,ChildTheme Configurator這外掛沒法完全解析出來。只能土法鍊鋼,用FTP去母佈景下載,再上傳到子佈景去

Wordpress Child Theme修改實例2-cannot redeclare


Final修改

在content-standard.php進行下述變更。

//原始函式第二個參數未傳任何值
hu_the_post_thumbnail( apply_filters( 'hu_grid_standard_thumb_size', 'thumb-standard' ), '', $placeholder = true, $placeholder_size = apply_filters( 'hu_grid_standard_placeholder_size', 'thumb-standard' ) );
//修改增加參數[ 'alt' => esc_html ( get_the_title() ) ]進去
hu_the_post_thumbnail( apply_filters( 'hu_grid_standard_thumb_size', 'thumb-standard' ), [ 'alt' => esc_html ( get_the_title() ) ], $placeholder = true, $placeholder_size = apply_filters( 'hu_grid_standard_placeholder_size', 'thumb-standard' ) );

後記補充

原設計主題 Hueman 有出付費的專業版,所以我猜想這簡單的 seo 功能才會被醃割掉,函式設計也不考慮擴充性,所以後面修改者就會費很多工。


參考資料

Post thumbnail alt title | A Guide to Overriding Parent Theme Functions in Your ChildTheme

您可能也會喜歡…

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *