問題描述
我正在使用一個主題,使用以下方式正確定義了大量影像大小:
add_image_size( 'name', 500, 200, true );
我想從孩子主題中覆蓋這些定義的大小:
add_image_size( 'new-name', 400, 300, true );
我知道我可以新增新的大小,但如果我新增相同的名稱,即:
add_image_size( 'name', 400, 300, true );
然後使用父函式呼叫 – 忽略子物件 – 新增額外的規則會新增額外的影像,這將永遠不會被使用 – 它不是那麼糟糕,但效率不高。
有沒有功能 de-register 新增影像大小?
乾杯!
射線
最佳解決方案
add_image_size( $name, $width, $height, $crop )功能可以使用相同的 $name 來處理多個呼叫。它只是 overwrites the existing value:
$_wp_additional_image_sizes[$name] = array( 'width' => absint( $width ), 'height' => absint( $height ), 'crop' => (bool) $crop );
所以這意味著你需要做的只是為了覆蓋父主題的自定義影像大小的定義,以確保在主題主題呼叫之後,對 add_image_size()的呼叫被觸發。
假設父主題是這樣的:
function parent_theme_setup() {
add_image_size( 'name', 500, 200, true );
add_image_size( 'new-name', 400, 300, true );
}
add_action( 'after_setup_theme', 'parent_theme_setup' );
然後,父主題的 add_image_size()呼叫在 after_setup_theme 鉤子處以預設優先順序 (即 10) 觸發。
(注意:如果呼叫未包裝在回撥中,則在 plugins_loaded 鉤子處,以 10 為優先順序) 。
以下是關鍵部分:子主題的 functions.php 檔案在父主題之前被解析,所以如果使用相同的鉤子來觸發 add_image_size()呼叫,它們將被父主題的 add_image_size()呼叫所覆蓋。
解決方案是使用稍後的掛鉤或更低的優先順序,以確保在主題主題之後觸發子主題的 add_image_size()呼叫。
這應該是訣竅,無論父主題如何觸發它的呼叫:
function child_theme_setup() {
add_image_size( 'name', 400, 300, true );
}
add_action( 'after_setup_theme', 'child_theme_setup', 11 );
請注意,我們使用相同的 after_setup_theme 鉤子,但使用較低的優先順序 (即 11 而不是 10) 。從優先順序 (較低的數字) 到較低的優先順序 (較高的數量),從回撥開始,從優先順序 0 開始,回撥掛起優先順序 11 將在一個回撥掛鉤到 10 之後觸發。
還要注意,after_setup_theme 鉤子本身在 plugins_loaded 鉤子之後觸發,所以這個回撥依然會覆蓋父主題,即使父主題是_doing_it_wrong(),也沒有將這樣的呼叫包含在適當的回撥中,掛鉤到一個適當的鉤子中。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。