পৃষ্ঠার টেমপ্লেট হলে চিত্রের আকার যুক্ত করুন


13

আমি ওয়ার্ডপ্রেস মাল্টিটাইট দিয়ে একটি সদস্য ওয়েবসাইট তৈরি করছি। নির্বাচিত টেম্পলেটটির উপর নির্ভর করে কতগুলি চিত্র উত্পন্ন হচ্ছে তা সীমাবদ্ধ করা সম্ভব?

গ্যালারী টেম্পলেটে কিছু নির্দিষ্ট চিত্র উত্পন্ন করতে আমি নীচের কোডগুলির লাইনগুলি চেষ্টা করেছি:

// Generate on all uploads
add_theme_support('post-thumbnails');
set_post_thumbnail_size( 1440, 350, true ); 
add_image_size( 'standard_box', 450, 215, true );
add_image_size( 'default_image', 691, 9999 );

// Generate on gallery template only
if ( is_page_template('page-gallery.php') ) {
add_image_size( 'gallery', 900, 9999 );
add_image_size( 'gallery_thumb', 450, 450, true );
}

এটি কাজ করে নি। আমি কিছু গবেষণা করেছি এবং বিষয়টিতে কিছুই খুঁজে পাচ্ছি না বলে মনে হচ্ছে। আপনি যদি আমাকে সঠিক দিকে নির্দেশ করতে পারতেন তবে আমি সত্যিই এটির প্রশংসা করব।


1
অটো-এর ডায়নামিক ইমেজ রিজাইজার রয়েছে যা আপনাকে যতগুলি ইমেজ মাপ আপনি চান তা সংজ্ঞায়িত করতে দেয়, তবে যখন প্রয়োজন হয় কেবল নির্দিষ্ট আকারে একটি চিত্র তৈরি করে rates আপনার উদাহরণের জন্য গ্যালারী থাম্বনেইলগুলি কেবল সেই পৃষ্ঠাগুলির জন্য তৈরি করা হবে যা পৃষ্ঠা-গ্যালারী.এফপি টেম্পলেটটিতে প্রদর্শিত হয়।
হেলগাটিভিকিং

2
কেবলমাত্র দুটি দুর্দান্ত বিকল্প উল্লেখ করতে চাই: @ কায়ারের ডায়নামিক চিত্রের আকার পরিবর্তন এবং জেটপ্যাকের ফোটন পরিষেবা
বার্গিরে

উত্তর:


13

এটি সর্বদা আমার জন্য বাগবियर হয়ে দাঁড়িয়েছে - অন-ডিমান্ড ইমেজ সাইজিংয়ের অভাব এবং এরপরে থাকা ফাইলগুলির সংখ্যার পরিমাণ যদি আপনি প্রচুর আকারের হয়ে থাকেন তবে শেষ করতে পারেন!

আমি আপনার প্রচেষ্টার পিছনে যুক্তি দেখতে পাচ্ছি - সমস্যাটি হচ্ছে, add_image_sizeপয়েন্ট-অফ-আপলোডে কেবল সত্যই কার্যকর হয়। যেমন, is_page_template(..)সর্বদা থাকবে false

একটি দ্রুত গুগল এই সমস্যাটি মোকাবেলার জন্য ডিজাইন করা স্ক্রিপ্ট অ্যাকোয়া রেজাইজার খনন করেছে। ব্যবহারের পরিবর্তে add_image_size, আপনি aq_resizeসরাসরি আপনার থিমটিতে ব্যবহার করেন এবং যদি চিত্রটির জন্য কোনও আকারের অস্তিত্ব না থাকে, তবে এটি তৈরি এবং অন ফ্লাইটে ক্যাশেড।

প্রকৃতপক্ষে আমি অনেকগুলি চিত্রের আকার সহ বেশ কয়েকটি সাইটে একটি ভিন্ন, কৌশল ব্যবহার করি। আপনি এখনও আপলোড হওয়া প্রতিটি চিত্রের জন্য প্রতিটি আকার তৈরি করে ওয়ার্ডপ্রেসের ওভারহেড সংরক্ষণ করুন - তাদের অনুরোধ করা হয় এবং সেগুলি অন-দ্য ফ্লাই (& ক্যাশেড) তৈরি করা হয়। যেখানে এটির ভিন্নতা রয়েছে, তা হ'ল আপনি সাধারণত WP এর সমস্ত স্ট্যান্ডার্ড ইমেজ ফাংশন এবং টেম্পলেট ট্যাগগুলি ব্যবহার করতে পারেন!

এছাড়াও, যেমন @ ওয়াকাস উল্লেখ করেছেন, আপনি যখন আপনার মিডিয়া লাইব্রেরি থেকে কোনও চিত্র মুছবেন তখন অ্যাকোয়া রেজাইজার ব্যবহার করে এতিম ফাইলগুলি ছেড়ে যাবে। আমার প্রযুক্তির সাহায্যে সমস্ত ফাইল মুছে ফেলা হবে, যেহেতু সেগুলি ডেটাবেসে সংরক্ষণ করা হয়েছে এবং ওয়ার্ডপ্রেস দ্বারা স্বীকৃত।

/**
 * Resize internally-registered image sizes on-demand.
 *
 * @link    http://wordpress.stackexchange.com/q/139624/1685
 * 
 * @param   mixed   $null
 * @param   int     $id
 * @param   mixed   $size
 * @return  mixed
 */
function wpse_139624_image_downsize( $null, $id, $size ) {
    static $sizes = array(
        'post-thumbnail' => array(
            'height' => 350,
            'width'  => 1440,
            'crop'   => true,
        ),

        'standard_box' => array(
            'height' => 215,
            'width'  => 450,
            'crop'   => true,
        ),

        'default_image' => array(
            'height' => 9999,
            'width'  => 691,
            'crop'   => false,
        ),

        'gallery' => array(
            'height' => 900,
            'width'  => 9999,
            'crop'   => false,
        ),

        'gallery_thumb' => array(
            'height' => 450,
            'width'  => 450,
            'crop'   => true,
        ),
    );

    if ( ! is_string( $size ) || ! isset( $sizes[ $size ] ) )
        return $null;
    if ( ! is_array( $data = wp_get_attachment_metadata( $id ) ) )
        return $null;
    if ( ! empty( $data['sizes'][ $size ] ) )
        return $null;
    if ( $data['height'] <= $sizes[ $size ]['height'] && $data['width'] <= $sizes[ $size ]['width'] )
        return $null;
    if ( ! $file = get_attached_file( $id ) )
        return $null;

    $editor = wp_get_image_editor( $file );

    if ( ! is_wp_error( $editor ) ) {
        $data['sizes'] += $editor->multi_resize(
            array(
                $size => $sizes[ $size ],
            )
        );

        wp_update_attachment_metadata( $id, $data );
    }

    return $null;
}

add_filter( 'image_downsize', 'wpse_139624_image_downsize', 10, 3 );

এবং অনুশীলনে:

wp_get_attachment_image( $id, 'gallery' ); // Resized if not already
wp_get_attachment_image_src( $id, 'standard_box' ); // Resized if not already
the_post_thumbnail(); // You get the idea!
// And so forth!

আমি এটিকে একটি প্লাগইনে রূপান্তরিত করতে চাইছি যা সমস্ত add_image_sizeকলকে স্বয়ংক্রিয়ভাবে অন-চাহিদা পুনরায় আকারে রূপান্তরিত করে, তাই এই স্থানটি দেখুন!


এত দুর্দান্ত উত্তর দেওয়ার জন্য সময় দেওয়ার জন্য আপনাকে ধন্যবাদ। আমি অবশ্যই এই যেতে হবে। একাধিক ব্যবহারকারীর কাছে আমার সার্ভারটি খোলার আগে এই অধিকারটি পাওয়া গুরুত্বপূর্ণ। আমার আরও কিছু প্রশ্ন থাকলে আমি আপনাকে চিৎকার করব।
স্যাম

2
আমি_পোস্ট_থম্বনেইল () দিয়ে এটিকে এগিয়ে গিয়েছি; এবং এটি পুরোপুরি কাজ করে। একটি সমস্যা: আমি যখন চিত্রটি মুছব, তখন এটি আপনার স্ক্রিপ্টটির দ্বারা পুনরায় আকারের আকারের পিছনে চলে যায়। কোন ধারনা?
স্যাম

5


দাবি পরিত্যাগী:
- এই নয় আসলে একটি উত্তর।
- বিষয়টিতে আপনার অতিরিক্ত গবেষণাতে আপনাকে সহায়তা করার উদ্দেশ্যে এটি করা হয়েছে
- উপরন্তু এটা করা হয় একটি অনুধ্যায়ী - একই ধরণের সমস্যা সংক্রান্ত অনুরূপ প্রশ্ন ইদানীং অধিক ঘনঘন সংঘটন - অন্তত অনুভূত হয়।


ওয়ার্ডপ্রেস বিকাশ সম্পর্কিত এই বিষয় সম্পর্কিত অতিরিক্ত তথ্য:

দ্রষ্টব্য: তালিকাটি কোনও উপায়ে অর্ডার করা এবং ব্যাপক নয়।


3

আপনি যদি উড়তে থাম্বগুলি তৈরি করতে চান তবে আপনি অ্যাকোয়া চিত্র প্রতিরোধক ব্যবহার করতে পারেন , তবে এই মিনি স্ক্রিপ্টটির একটি অপূর্ণতা রয়েছে। তৈরি থাম্বগুলি গ্রন্থাগার থেকে চিত্র মোছার পরে মুছবে না। তবে এটি কোনও বড় বিষয় নয়। প্রয়োজনে আপনি এসএইচএইচ কমান্ডের মাধ্যমে এটি করতে পারেন


1
ফাইল মুছে ফেলা হচ্ছে না সম্পর্কে ভাল পয়েন্ট। আমার সমাধান এ থেকে ভোগা হবে না! (আপডেট উত্তর দেখুন)।
TheDeadMedic

1

এটি আপনার সমস্যার সরাসরি উত্তর নয়। তবে আমি আপনাকে আপনার প্রয়োজন অনুসারে চিত্র তৈরি করতে সহায়তা করব।

আপনি যখন add_image_size ব্যবহার করেন এটি বিদ্যমান চিত্রগুলির আকার পরিবর্তন করে না। এটি কেবলমাত্র নতুন চিত্রগুলির জন্য কাজ করে যা আপনার অ্যাড_মিজ_সেস ফাংশন যুক্ত করার পরে আপলোড করা হবে।

সুতরাং আপনার কোড is_page_template ফাংশনের জন্য নতুন চিত্র তৈরি করবে না।

তবে আপনি আপনার সমস্যা সমাধানের জন্য একটি সাধারণ পিএইচপি ক্লাস ব্যবহার করতে পারেন .... এটি একটি বিখ্যাত পিএইচপি ক্লাস যা ওয়ার্ডপ্রেসের জন্য প্রচুর প্রিমিয়াম থিমের জন্য ব্যবহৃত হচ্ছে। একে অ্যাকোয়া-রাইজার বলে।

আপনি এখানে আরও বিশদ জানতে পারেন https://github.com/syamilmj/Aqua- রিজার্জার উইকি: https://github.com/syamilmj/Aqua-Resizer/wiki

সমস্যা দেখা দিতে পারে:

এই ফাংশনটি এভাবে কাজ করে ....

<?php aq_resize( $url, $width, $height, $crop, $single ) ?>

সুতরাং যখন এটি ক্রপ করতে না পারে (ছোট চিত্রের জন্য যে আপনার উচ্চতা বা প্রস্থ নির্ধারিত হয়েছে) এটি কিছুই দেখায় না। আপনি খুব সহজেই এখানে আমার মতো এই ফাংশনটির মধ্যে ইউআরএল পাস করার পরে নাল মান পাচ্ছেন কিনা তা পরীক্ষা করে আপনি এই পরিস্থিতিটি কাটিয়ে উঠতে পারেন ....

<?php 
$thumb = wp_get_attachment_url( get_post_thumbnail_id($post->ID), 'full' ); if($thumb){ $url = aq_resize( $thumb, 400, 200, true, true ); if(!$url){ $url = WPM_DIR.'/assets/images/demo/wrong_image_size.jpg'; } }else{ $url = WPM_DIR.'/assets/images/demo/400x200_no_feature_image.jpg'; } 
?>

এইভাবে আপনি নিশ্চিত করতে পারবেন যে নির্দিষ্ট চিত্রটি নির্দিষ্ট পৃষ্ঠার টেমপ্লেটের জন্য উত্পন্ন হবে এবং এইভাবে আপনার ওয়েবসাইটটি আরও বেশি ক্লিনার হবে।

PS: এই পিএইচপি শ্রেণিটি ওয়ার্ডপ্রেস মূল ক্রপিং সিস্টেম ব্যবহার করে যাতে সুরক্ষা সমস্যা নেই।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.