問題描述

我正在使用一個主題,使用以下方式正確定義了大量圖像大小:

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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。