该add_image_size( $name, $width, $height, $crop )
函数足够优雅,可以使用来处理多个调用$name
。它只是覆盖现有值:
$_wp_additional_image_sizes[$name] = array( 'width' => absint( $width ), 'height' => absint( $height ), 'crop' => (bool) $crop );
因此,这意味着要覆盖父主题对自定义图像大小的定义,您要做的就是确保在父主题的call 之后触发您的调用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()
通过不包装在一个适当的回调此类电话,挂到一个合适的钩。
add_image_size()
电话只是坐在赤裸裸的functions.php
,或者他们正确地包裹回调,并挂到里面after_setup_theme
?知道哪个对回答您的问题至关重要。