eliminar o actualizar add_image_size

16

Estoy trabajando en un tema que tiene varios tamaños de imagen definidos correctamente usando:

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

Me gustaría anular estos tamaños definidos del tema secundario:

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

Sé que puedo agregar nuevos tamaños, pero si agrego el mismo nombre, es decir:

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

Luego se usa la llamada a la función principal, se ignora la secundaria, al agregar reglas adicionales se agregan imágenes adicionales que nunca se usarán, no es tan malo, pero no es eficiente.

¿Existe una función para cancelar el registro de un tamaño de imagen agregado?

¡Salud!

Rayo

Q Studio
fuente
¿Puedes por favor publicar el código completo que es relevante? ¿Las add_image_size()llamadas simplemente se sientan desnudas functions.php, o se envuelven correctamente dentro de una devolución de llamada y se enganchan after_setup_theme? Saber cuál es fundamental para responder a su pregunta.
Chip Bennett
hola chip, gracias por tu comentario, tienes razón, está envuelto en after_setup_theme, así que esto se trata de prioridades nuevamente, ¡siempre lo extraño!
Q Studio

Respuestas:

22

La add_image_size( $name, $width, $height, $crop )función es lo suficientemente elegante como para manejar múltiples llamadas usando la misma $name. Simplemente sobrescribe el valor existente :

$_wp_additional_image_sizes[$name] = array( 'width' => absint( $width ), 'height' => absint( $height ), 'crop' => (bool) $crop );

Eso significa que todo lo que necesita hacer para anular la definición del Tema principal del tamaño de imagen personalizado es asegurarse de que su llamada se add_image_size()active después de la llamada del Tema principal .

Suponiendo que el Tema principal lo haga así:

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' );

Luego, la add_image_size()llamada del Tema principal se activa en el after_setup_themegancho, en la prioridad predeterminada (es decir 10).

(Nota: si las llamadas no están envueltas en una devolución de llamada, entonces se disparan en el plugins_loadedgancho, con prioridad 10).

Aquí está la parte crítica: el functions.phparchivo del tema secundario se analiza antes que el tema principal , por lo que si usa los mismos ganchos para disparar sus add_image_size()llamadas, las add_image_size()llamadas del tema primario lo anularán .

La solución es utilizar un enlace posterior o una prioridad inferior , para garantizar que la add_image_size()llamada del Tema secundario se active después del Tema principal.

Esto debería hacer el truco, independientemente de cómo el Tema principal active sus llamadas:

function child_theme_setup() {
    add_image_size( 'name', 400, 300, true );
}
add_action( 'after_setup_theme', 'child_theme_setup', 11 );

Tenga en cuenta que usamos el mismo after_setup_themegancho, pero utilizamos una prioridad más baja (es decir, en 11lugar de 10. Las devoluciones de llamada se activan en orden de prioridad más alta (número más bajo) a prioridad más baja (número más alto), comenzando con la prioridad0 . Entonces, una devolución de llamada enganchada en prioridad 11se disparará después de una devolución de llamada enganchada en prioridad 10.

Tenga en cuenta también que el after_setup_themegancho en sí mismo se activa después del plugins_loadedgancho, por lo que esta devolución de llamada seguirá anulando el tema principal, incluso si el tema principal _doing_it_wrong()no está envolviendo dichas llamadas en una devolución de llamada adecuada, enganchado en un enlace apropiado.

Chip Bennett
fuente
excelente - gracias chip! - Los tenía a ambos con la misma prioridad: devolví la muesca al niño después del padre y todo funcionó bien.
Q Studio
Parece que no puedo sobrescribir el valor si un complemento está llamando a add_image_size :(
Zhianc
1

Si alguien quiere simplemente desarmar los tamaños de imagen adicionales, en lugar de cambiar las dimensiones, use remove_image_size (string $ name) , por ej.

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);
Yulia V
fuente
-1

En tu tema de chile deberías usar add_action( 'after_setup_theme','new-name');

Robin
fuente
new-name aquí es el nombre de la función o el nombre que esté usando para su función principal
robin
Agregue una explicación a su respuesta: ¿por qué y cómo resuelve el problema? Tenga en cuenta que new-namees un nombre de devolución de llamada no válido.
fuxia
"new-name" es simplemente el identificador del tamaño de la imagen que se agrega.
Q Studio