Gere miniaturas apenas para imagens em destaque

9

Gostaria de saber se existe uma maneira simples (código ou plugin personalizado) de criar tamanhos de miniatura apenas para imagens que pretendo usar como imagens em destaque (index.php, archive.php, etc.), mas não para as imagens usado nas postagens (single.php). Meu principal objetivo é reduzir o uso do espaço no servidor, não criando miniaturas que meu tema nunca usará.

Na verdade, minhas miniaturas teriam apenas dois tamanhos, 720p de largura e 328px de largura, e as imagens em destaque de 720px (apenas na página inicial) também teriam uma de 328px (para archive.php e sidebar.php)

Atualmente, a única maneira programática que conheço é gerar miniaturas para cada upload de imagem , o que é indesejável, pois a maioria dos meus uploads será pós-imagem e eu precisaria excluir muitas imagens manualmente do servidor.

Eu preferiria código personalizado sobre plugins, mas um plug-in seria aceitável. Sei que existem alguns plugins de redimensionamento de imagens por aí, mas eles não são atualizados há muito tempo (TimThumb, Dynamic Image Resizer ).

Também encontrei uma pergunta semelhante aqui no Wordpress SE, mas a resposta aceita realmente não resolve o meu problema.


EDIT: Eu preciso excluir ou impedir miniaturas de imagens dentro da postagem, não de imagens em destaque, ou seja:

(1) Imagem em destaque : miniaturas adicionais geradas automaticamente pelo WP estão OK.

(2) Imagens usadas nas postagens : carregue a imagem original e não gere nenhum tamanho adicional. Cortarei, redimensionarei e otimizaremos a imagem antes de enviá-la e um tamanho atenderá às minhas necessidades.

imrek
fonte
11
Em primeiro lugar, diz possível duplicado ; segundo, isso pode ajudá-lo a resolver seu problema, porque você pode ajustá-lo às suas necessidades; Por último, mas não menos importante, há uma resposta para o plug-in »Dynamic Image Resizer«, embora seja diferente.
Nicolai
2
Não há tempo para mergulhar nele, mas o que você sabe é o ID em miniatura - meta key: _thumbnail_id-, que deve ser suficiente, na verdade, save_poste ganchos semelhantes podem ser um caminho a percorrer. Mas não esqueça que essas imagens em sua postagem podem ser usadas em outras postagens como miniatura. Você pode querer ter um mecanismo para explicar isso.
Nicolai
11
Considerando o que você escreveu, você não se importa com os tamanhos adicionais da imagem em destaque, pensei: se você sabe qual das imagens anexas é a miniatura da postagem / imagem em destaque, é possível excluir os tamanhos de imagem adicionais das outras. , excluindo a imagem em destaque desse processo. Eu mencionei uma possível restrição / desvantagem antes.
Nicolai
11
Sugestão: desative o redimensionamento completamente via add_filter('intermediate_image_sizes_advanced', '__return_false')e, em seguida, redimensione as miniaturas
rapidamente

Respostas:

2

Essa função gera uma imagem registrando temporariamente um tamanho de imagem, gerando a imagem (se necessário) e removendo o tamanho para que novas imagens não sejam criadas nesse tamanho.

function lazy_image_size($image_id, $width, $height, $crop) {
    // Temporarily create an image size
    $size_id = 'lazy_' . $width . 'x' .$height . '_' . ((string) $crop);
    add_image_size($size_id, $width, $height, $crop);

    // Get the attachment data
    $meta = wp_get_attachment_metadata($image_id);

    // If the size does not exist
    if(!isset($meta['sizes'][$size_id])) {
        require_once(ABSPATH . 'wp-admin/includes/image.php');

        $file = get_attached_file($image_id);
        $new_meta = wp_generate_attachment_metadata($image_id, $file);

        // Merge the sizes so we don't lose already generated sizes
        $new_meta['sizes'] = array_merge($meta['sizes'], $new_meta['sizes']);

        // Update the meta data
        wp_update_attachment_metadata($image_id, $new_meta);
    }

    // Fetch the sized image
    $sized = wp_get_attachment_image_src($image_id, $size_id);

    // Remove the image size so new images won't be created in this size automatically
    remove_image_size($size_id);
    return $sized;
}

É "preguiçoso" porque as imagens não são geradas até serem necessárias.

No seu caso de uso, você chamaria isso lazy_image_sizecom o ID da miniatura da postagem para obter uma imagem do tamanho desejado. Uma imagem seria gerada na primeira chamada. As chamadas subseqüentes buscariam a imagem existente.

Gist: https://gist.github.com/mtinsley/be503d90724be73cdda4

Mathew Tinsley
fonte
0

Você pode ver este link . tem algum exemplo como

add_action( 'after_setup_theme', 'baw_theme_setup' );
function baw_theme_setup() {
  add_image_size( 'category-thumb', 300 ); // 300 pixels wide (and unlimited height)
  add_image_size( 'homepage-thumb', 220, 180, true ); // (cropped)
}
Jakir Hossain
fonte
2
Eu preciso de miniaturas apenas para determinadas imagens, não para tudo o que carrego. Basicamente, quando eu carrego uma imagem, quero controlar se as miniaturas são criadas ou não.
imrek
mas por que? o espaço de armazenamento é um problema? realmente difícil imaginar isso quando há tanto espaço de armazenamento disponível.
Aequalsb
0

1. Vá para Painel> Configurações> Mídia
2. Desmarque a opção Cortar miniatura nas dimensões exatas (normalmente as miniaturas são proporcionais)
3. Digite 0 para todas as entradas (0 para todos os tamanhos)
4. Adicione-as às suas funções.php

// Enable support for Post Thumbnails, and declare sizes.
add_theme_support( 'post-thumbnails' );
set_post_thumbnail_size( 400, 400, array("center","center") );
function fw_add_image_insert_override($sizes){
    // unset( $sizes['thumbnail']);
    unset( $sizes['small']);
    unset( $sizes['medium']);
    unset( $sizes['large']);
    return $sizes;
}
add_filter('intermediate_image_sizes_advanced', 'fw_add_image_insert_override' );

5. Certifique-se de que não haja nenhuma linha de código em suas funções.php comece com add_imge_size Nota:: Suponho que você use tamanho de 400x400 para sua miniatura Agora, quando você enviar uma foto, ela criará apenas 2 versões em vez de pelo menos 4 versões como anterior.

Trang
fonte
0

Oi - eu tive um problema semelhante. O Woocommerce usa imagens de catálogo para catálogo e imagens de produtos relacionados. Isso não é o ideal, pois você perde a qualidade ou a velocidade da imagem. Então, tentei adicionar uma quarta categoria de imagem para meus produtos relacionados. Howdy McGee resolveu o problema. Por favor, dê uma olhada na resposta de Howdy McGees:

Modificar tamanhos relacionados à imagem do produto: leia o código dele !

Funcionou magnificamente para minhas necessidades. Para o seu problema, a mesma lógica pode ser aplicada. Espero que isto ajude. cumprimentos - theo

Eu encontrei uma solução que funciona. 1.step: atribua um novo tamanho de miniatura em suas funções.php. Verifique a referência: wp codex !

/*add your custom size*/
add_action( 'after_setup_theme', 'your_theme_setup' );
function your_theme_setup() {
add_image_size( 'your-thumb', 123, 123, true );//insert your values
}

Nota: 'seu polegar', você usará esse nome de variável posteriormente

  1. etapa: adicione o seguinte código sempre que desejar exibir seus produtos em destaque:

    <h1>featured products</h1> 
    <div class="woocommerce">
    <ul class= "products">
    
    <?php
    $args = array( 'post_type' => 'product', 'meta_key' => '_featured','posts_per_page' => 4,'columns' => '4', 'meta_value' => 'yes' );
     $loop = new WP_Query( $args );
    
     while ( $loop->have_posts() ) : $loop->the_post(); global $product; ?>
    
                    <li class="product post-<?php echo get_the_ID(); ?>">    
                        <a href="<?php echo get_permalink( $loop->post->ID ) ?>" title="<?php echo esc_attr($loop->post->post_title ? $loop->post->post_title : $loop->post->ID); ?>">
    
                            <?php woocommerce_show_product_sale_flash( $post, $product ); ?>
                            <?php if (has_post_thumbnail( $loop->post->ID )) echo get_the_post_thumbnail($loop->post->ID, 'your-thumb'); else echo '<img src="'.woocommerce_placeholder_img_src().'" alt="Placeholder" width="123px" height="123px" />'; ?></a>
                            <h3><?php the_title(); ?></h3><span class="price"><?php echo $product->get_price_html(); ?></span>
    
                    </li>
    
    <?php endwhile; ?>
    <?php wp_reset_query(); ?> 
    </ul>
    </div>

Referências e informações: reputação insuficiente para um terceiro link, desculpe (www.haloseeker.com/display-woocommerce-featured-products-without-a-shortcode/) Coloquei-o no index.php (minha página inicial) do wootheme mystile . Não se esqueça de usar o 'polegar' on-line:

<?php if (has_post_thumbnail( $loop->post->ID )) echo get_the_post_thumbnail($loop->post->ID, 'your-thumb'); else echo '<img src="'.woocommerce_placeholder_img_src().'" alt="Placeholder" width="123px" height="123px" />'; ?></a>
  1. etapa: regenerar miniaturas, use o plug-in https://wordpress.org/plugins/regenerate-thumbnails/

  2. atualize o navegador e inspecione o dom e compare os valores

De acordo com o seu tema, você pode alterar a marcação e os nomes das classes. Eu testeto o método acima e funciona bem. A única coisa que não pude fazer até agora é adicionar o botão adicionar ao carrinho, pois não sei como escrever uma variável no código curto do botão adicionar ao carrinho. Este é o código:

<?php echo do_shortcode('[add_to_cart id="variable number?"]'); ?>

Eu espero que isso ajude. Certamente, existe uma maneira mais elegante de fazer isso. Por exemplo, com uma função no functions.php

diz respeito a theo

timholz
fonte
0

Para impedir que o WordPress crie tamanhos adicionais apenas para determinadas imagens, você precisará indicar que uma imagem que você deseja enviar será usada apenas para uma finalidade específica. isso deve acontecer antes de você fazer o upload.

como não existe essa interface (pronta para uso) para indicar essas opções durante uma ação de upload, não é possível impedir a geração adicional de imagens - a menos que houvesse um plug-in que adicionasse esse recurso.

mas por que você não gostaria dos tamanhos de imagem adicionais? você nunca sabe quando pode encontrar uma situação em que deseja usar um tamanho diferente de qualquer imagem. você está preocupado com o espaço de armazenamento?

você não pode usar suas próprias especificações de tamanho específicas como esta? the_post_thumbnail( array(100, 100) );

a maioria das respostas e comentários que li aqui explicam como personalizar o ambiente do WordPress para tamanhos de imagem, mas nenhum menciona fazê-lo condicionalmente. além disso, nenhum deles aborda o fato de que você deve poder indicar o uso de uma imagem antes de carregá-la.

se você estiver tentando compensar uma imagem muito pequena ou muito grande em uma postagem, poderá utilizar algumas coisas.

  1. CSS: você pode adicionar entradas à sua folha de estilo, como .post-entry img { max-width:200px; max-height:300px; }, por exemplo , isso é mais universal e eficaz do que depender do tamanho da imagem em si - é muito tempo para o photoshop.

  2. Modelo: você pode alterar o arquivo de modelo em que as mensagens HTML estão sendo geradas e especificar um tamanho de imagem como este:

consulte esta documentação no WordPress: https://codex.wordpress.org/Function_Reference/the_post_thumbnail

aequalsb
fonte