该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?知道哪个对回答您的问题至关重要。