删除或更新add_image_size


16

我正在处理一个主题,该主题使用以下方法正确定义了许多图像尺寸:

add_image_size( 'name', 500, 200, true );

我想从子主题中覆盖这些定义的大小:

add_image_size( 'new-name', 400, 300, true );

我知道我可以添加新的尺寸,但是如果添加相同的名称,即:

add_image_size( 'name', 400, 300, true );

然后使用父函数调用-子函数被忽略-添加额外的规则将添加永远不会使用的额外图像-不错,但效率不高。

是否有取消注册附加图像尺寸的功能?

干杯!

射线


您能否发布相关的完整代码?是add_image_size()电话只是坐在赤裸裸的functions.php,或者他们正确地包裹回调,并挂到里面after_setup_theme?知道哪个对回答您的问题至关重要。
Chip Bennett

嗨,芯片-感谢您的评论-您说得对,它被包装在after_setup_theme中-所以这又是所有关于优先级的问题-我总是很想念它!
Q Studio

Answers:


22

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()通过不包装在一个适当的回调此类电话,挂到一个合适的钩。


很棒-感谢芯片!-我把它们都放在了相同的优先级上-让孩子在父母的陪伴下回来,而且一切都很好。
Q Studio

如果插件正在调用add_image_size,我似乎无法覆盖该值:(
Zhianc 2015年

1

如果有人想简单地取消设置其他图像大小,而不是更改尺寸,请使用remove_image_size(string $ name),例如

function pinboard_child_theme_setup( $sizes) {

    $image_size_names = array('thumbnail', 'medium', 'large',
        'slider-thumb', 'blog-thumb', 'teaser-thumb', 'gallery-1-thumb',
        'gallery-2-thumb', 'gallery-3-thumb', 'image-thumb', 'video-thumb');

    $image_size_names_length = count($image_size_names);
    for($x = 0; $x < $image_size_names_length; $x++) {
        remove_image_size($image_size_names[$x]);
    }   
}
add_action( 'after_setup_theme', 'pinboard_child_theme_setup', 11);

-1

在您的智利主题中,您需要使用 add_action( 'after_setup_theme','new-name');


new-name在这里是函数的名称,或者是您用于主要函数的名称
robin 2012年

在您的答案中添加解释:为什么以及如何解决问题?请注意,这new-name是无效的回调名称。
fuxia

“新名称”只是添加图像大小的句柄。
Q Studio
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.