Створюйте мініатюри лише для обраних зображень


10

Мені хотілося б знати, чи існує простий спосіб (спеціальний код або плагін) для створення розмірів мініатюр лише для зображень, які я маю намір використовувати як обрані зображення (index.php, archive.php тощо), але не для зображень використовується в дописах (single.php). Моя головна мета - зменшити використання серверного простору, не створюючи ескізів, які моя тема ніколи не використовуватиме.

Насправді мої ескізи мали б лише два розміри: 720 пікселів і 328 пікс., А зображення із широкою розміром 720 пікселів (лише для домашньої сторінки) також матиме широке 328 пікселів (для archive.php та sidebar.php)

Наразі єдиний програмний спосіб, який я знаю, - це генерувати ескізи для кожного завантаження зображень , що небажано, оскільки більшість моїх завантажень будуть розміщувати зображення після публікації, і мені доведеться видалити багато зображень із сервера вручну.

Я вважаю за краще спеціальний код над плагінами, але плагін буде прийнятним. Я знаю, що там є кілька плагінів зміни розміру зображення, але вони не оновлювалися давно (TimThumb, Dynamic Image Resizer ).

Я також знайшов подібне запитання тут у Wordpress SE, але прийнята відповідь насправді не вирішує мою проблему.


EDIT: Мені потрібно видалити чи запобігти ескізи для зображень всередині публікації, а не для зображених зображень, тобто:

(1) Вибране зображення : додаткові мініатюри, автоматично створені WP, добре.

(2) Зображення, використані всередині публікацій : Завантажте оригінальне зображення та не створюйте додаткових розмірів. Я обрізаю, змінюю розмір та оптимізую зображення перед завантаженням, і один розмір буде відповідати моїм потребам.



1
По-перше, це говорить про можливий дублікат ; по-друге, це може допомогти вам вирішити свою проблему, оскільки, можливо, ви можете зробити її відповідно до ваших потреб; І останнє, але не менш важливе, є відповідь на плагін «Динамічний резизер зображення», хоча він є іншим.
Миколай

2
Немає часу занурюватися в нього, але те, що ви знаєте, - це мініатюрна ідентифікація - мета-клавіша: _thumbnail_id-, якої насправді має бути достатньо, save_postі подібні гачки можуть бути дорогою. Але не забувайте, що ці зображення у вашій публікації можуть використовуватися в інших публікаціях як ескізи, можливо, ви хочете мати механізм для цього.
Миколай

1
З огляду на те, що ви написали, ви не заперечуєте проти додаткових розмірів зображеного зображення, я більше задумався: Якщо ви знаєте, на якому із доданих зображень розміщено мініатюрну / розміщену картинку, ви можете видалити додаткові розміри зображень для інших , виключаючи представлене зображення з цього процесу. Раніше я згадував про одне можливе обмеження / недолік.
Миколай

1
Пропозиція: повністю відключити розмір через, add_filter('intermediate_image_sizes_advanced', '__return_false')а потім змінити мініатюру під час
руху

Відповіді:


2

Ця функція буде генерувати зображення, тимчасово зареєструвавши розмір зображення, генеруючи зображення (якщо потрібно) та видаливши розмір, щоб нові зображення не створювались у такому розмірі.

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;
}

Це "лінь", тому що зображення не створюються, поки вони не потрібні.

У вашому випадку використання вам слід зателефонувати lazy_image_sizeза допомогою ідентифікатора мініатюри повідомлення, щоб отримати зображення потрібного розміру. Зображення буде створене під час першого дзвінка. Подальші дзвінки отримають наявне зображення.

Суть: https://gist.github.com/mtinsley/be503d90724be73cdda4


0

Ви можете побачити це посилання . є такий приклад, як

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)
}

2
Мені потрібні ескізи лише для певних зображень, а не для всього завантажуваного зображення. В основному, коли я завантажую зображення, я хочу контролювати, чи створюються ескізи чи ні.
imrek

але чому? це місце для зберігання? по-справжньому важко уявити, що коли є стільки місця для зберігання.
aequalsb

0

1.Перейти до панелі інструментів> Налаштування> Медіа 2.
Зніміть прапорець Обрізати мініатюру на точні розміри (зазвичай ескізи пропорційні)
3.Введіть 0 для всіх даних (0 для всіх розмірів)
4.Додайте їх до своїх функцій.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. Переконайтесь, що у ваших функціях немає рядка коду. Почніть з add_imge_size Примітка:: Я думаю, ви використовуєте розмір 400х400 для ескізу. Тепер, коли ви завантажуєте фотографію, це створить лише 2 версії замість принаймні 4 версії фотографії як і попередні.


0

щоб перешкодити WordPress створювати додаткові розміри лише для певних зображень, вам доведеться мати спосіб вказати, що зображення, яке ви завантажуєте, буде використовуватися лише для певної мети. це має відбутися перед тим, як ви його завантажили.

оскільки не існує такого інтерфейсу (поза вікном), який би вказував такі варіанти під час дії завантаження, ви не можете запобігти створенню додаткових зображень - якщо тільки не був плагін, який додав цю функцію.

але чому в світі ви б не хотіли додаткових розмірів зображення? ви ніколи не знаєте, коли ви можете зіткнутися з ситуацією, коли хочете використовувати інший розмір будь-якого зображення. Вас турбує місце для зберігання?

ви не можете використовувати свої власні специфікації такого розміру, як це? the_post_thumbnail( array(100, 100) );

Більшість відповідей та коментарів, які я читав тут, пояснюють, як налаштувати середовище WordPress під розміри зображень, але жодна згадка не робить це умовно. окрім того, жодна з них не звертається до факту, який ви повинні мати можливість вказати на використання зображення перед завантаженням.

якщо ви намагаєтеся компенсувати занадто маленьке зображення або занадто велике зображення в публікації, ви можете використовувати кілька речей.

  1. CSS: ви можете додати записи до таблиці стилів, такі як .post-entry img { max-width:200px; max-height:300px; }, це універсальніше та ефективніше, ніж покладатися на розмір самого зображення - ТОМО МНОГО часу фотошопу.

  2. Шаблон: Ви можете змінити файл шаблону, де створюється вихід HTML, і вказати розмір зображення таким чином:

дивіться цю документацію на WordPress: https://codex.wordpress.org/Function_Reference/the_post_thumbnail


0

Привіт - у мене була подібна проблема. WooCommerce використовує зображення каталогів для каталогу та відповідних зображень товарів. Це не ідеально, оскільки ви втрачаєте або якість зображення, або швидкість. Тому я спробував додати четверту категорію зображень для своїх пов’язаних продуктів. Хадді Макгі вирішив проблему. Будь ласка, подивіться на відповідь Howdy McGees:

Змінення розмірів відповідних зображень товару: прочитайте його код !

Це чудово склалося для моїх потреб. Для вашої проблеми може бути застосована та сама логіка. Сподіваюсь, це допомагає.

З повагою,

Тео

** Доповнення: **

Я знайшов рішення, яке працює.

Крок 1. Призначте новий розмір мініатюр у ваших функціях.php. Перевірте посилання: 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
}

Примітка: "великий палець", ви будете використовувати це ім'я змінної пізніше

Крок 2: Потім додайте наступний код, де ви хочете відобразити свої пропоновані продукти:

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

Довідка та інформація: ( www.haloseeker.com/display-woocommerce-featured-products-without-a-shortcode/ )

Я помістив його в index.php (мою домашню сторінку) програми wootheme mystyle. Не забудьте використати "великий палець" у мережі:

<?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>

Крок 3. Відновіть мініатюри, використовуйте плагін https://wordpress.org/plugins/regenerate-thumbnails/

Крок 4: Оновіть браузер і огляньте DOM та порівняйте значення

Відповідно до вашої теми ви можете змінити розмітку та назви класів. Я перевірив вищевказаний метод, і він працює добре.

Єдине, чого я поки не міг зробити, - це додати кнопку додавання до кошика, тому що я не знаю, як записати змінну в короткий код кнопки "Додати в кошик". Це код:

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

Я сподіваюся, що це допомагає.

Звичайно, є більш елегантний спосіб зробити це. Наприклад, з функцією в function.php

З повагою,

Тео

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.