remover ou atualizar add_image_size

16

Estou trabalhando em um tema que possui vários tamanhos de imagem definidos corretamente usando:

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

Gostaria de substituir esses tamanhos definidos do tema filho:

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

Eu sei que posso adicionar novos tamanhos, mas se eu adicionar o mesmo nome, ou seja:

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

Em seguida, a chamada de função pai é usada - a criança é ignorada - a adição de regras extras adiciona imagens extras que nunca serão usadas - não é tão ruim, mas não é eficiente.

Existe uma função para cancelar o registro de um tamanho de imagem adicional?

Felicidades!

Raio

Q Studio
fonte
Você pode postar o código inteiro relevante? As add_image_size()chamadas estão apenas nuas functions.phpou estão encapsuladas adequadamente dentro de um retorno de chamada e conectadas after_setup_theme? Saber o que é fundamental para responder à sua pergunta.
Chip Bennett
oi chip - obrigado pelo seu comentário - você está certo, está envolto em after_setup_theme - então isso é tudo sobre prioridades novamente - eu sempre sinto falta disso!
Q

Respostas:

22

A add_image_size( $name, $width, $height, $crop )função é graciosa o suficiente para lidar com várias chamadas usando a mesma $name. Simplesmente substitui o valor existente :

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

Isso significa que tudo o que você precisa fazer para substituir a definição do tamanho da imagem personalizada do Tema pai é garantir que sua chamada seja add_image_size()acionada após a chamada do Tema pai .

Supondo que o Tema Principal faça o seguinte:

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

Em seguida, a add_image_size()chamada do tema principal é acionada no after_setup_themegancho, na prioridade padrão (ou seja 10).

(Nota: se as chamadas não forem agrupadas em um retorno de chamada, serão acionadas no plugins_loadedgancho, com prioridade 10.)

Aqui está a parte crítica: o functions.phparquivo do tema filho é analisado antes do tema pai ; portanto, se você usar os mesmos ganchos para acionar suas add_image_size()chamadas, eles serão substituídos pelas add_image_size()chamadas do tema pai .

A solução é usar um gancho posterior ou uma prioridade mais baixa , para garantir que a add_image_size()chamada do Tema filho seja acionada após a do Tema pai.

Isso deve funcionar, independentemente de como o Tema pai aciona suas chamadas:

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

Observe que usamos o mesmo after_setup_themegancho, mas usamos uma prioridade mais baixa (ou seja, em 11vez de 10. Os retornos de chamada são acionados na ordem de prioridade mais alta (número menor) para prioridade mais baixa (número mais alto), começando com prioridade0 . Assim, uma chamada de retorno enganchado prioridade 11dispara depois um retorno de chamada ligado à prioridade 10.

Observe também que o after_setup_themegancho em si é acionado após o plugins_loadedgancho, portanto esse retorno de chamada ainda substituirá o Tema pai, mesmo se o Tema pai _doing_it_wrong()não estiver agrupando essas chamadas em um retorno de chamada apropriado, conectado a um gancho apropriado.

Chip Bennett
fonte
excelente - obrigado chip! - Eu tinha os dois com a mesma prioridade - entalhada a criança atrás dos pais e tudo funcionando bem.
Q4 de
Eu não posso parecer para substituir o valor se um plug-in é chamado add_image_size :(
Zhianc
1

Se alguém quiser simplesmente desconfigurar os tamanhos de imagem adicionais, em vez de alterar as dimensões, use remove_image_size (string $ name) , por exemplo

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
fonte
-1

No seu tema chile, você precisaria usar add_action( 'after_setup_theme','new-name');

robin
fonte
nova-nome aqui é o nome da função ou o que nunca o nome que você está usando para sua função principal
robin
Adicione uma explicação à sua resposta: por que e como isso resolve o problema? Observe que new-nameé um nome de retorno de chamada inválido.
fuxia
"novo nome" é simplesmente o identificador do tamanho da imagem que está sendo adicionado.
Q4 de