ডাব্লুপি মিডিয়া আপলোডার কীভাবে 3 টি বিভিন্ন আকারের চিত্র তৈরি করে এবং আমি কীভাবে এটির নকল করতে পারি?


17

আমি শেষ পর্যন্ত !! এই জিনিসটি আমি পেয়েছিলাম প্রায় 12 বার তৈরির জন্য এবং 12 টি বিভিন্ন উপায়ে চেষ্টা করেছি, তবে অবশেষে এটি কার্যকর হয়ে গেছে, ... সাজানো।

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

আমার এটি তৈরি করা দরকার যাতে আপনি যখন কোনও পোস্ট সংরক্ষণ / প্রকাশ করেন, সংযুক্তি ফাইলগুলি আপলোড / তৈরি করেন, তখন এটি তিনটি চিত্রের আকারকে ডিফল্ট ডাব্লুপি আপলোডার হিসাবে তৈরি করবে, থাম্বনেইল, মাঝারি, বড় এবং পূর্ণ আকারের চিত্রও রাখবে । যদি কোনওভাবে সম্ভব হয়। যদি তা না হয় তবে আমি অন্যথায় add_image_size()নতুন কাস্টম মাপ তৈরি / সংজ্ঞায়িত করতে এবং আপলোড করার পরিবর্তে সেগুলি সেভাবে উত্পন্ন করতে চাই।

আমি নিশ্চিত না এই ক্ষেত্রে কোন image_make_intermediate_size()ফাংশনটি ব্যবহার করা সবচেয়ে আদর্শ, সম্ভবত ফাংশনটি আরও ভাল হবে, wp_create_thumbnail()বা wp_crop_image()... বা কে জানে !!

আমি কীভাবে এটি করা যায় তা অনুমান করতে পারি না, যদি wp_handle_upload()প্রত্যেকের জন্য আমার যদি ফাংশনটি চালানোর প্রয়োজন হয় , বা wp_generate_attachment_metadata()ফাংশন জড়িত কিছু হতে পারে । এটি আমার কাছে বিভ্রান্তিকর কারণ 3 টি চিত্রের আকারগুলি একই সংযুক্তির রূপ হিসাবে যুক্ত হতে পারে এবং কীভাবে এটি করা যায় to

আমি ওয়েবে স্কোর করেছি, প্রতিটি ডাব্লুপি মিডিয়া / আপলোড / চিত্র সম্পর্কিত ফাইলের উত্স পড়েছি এবং মিডিয়া আপলোড স্টাফগুলির জন্য রয়েছে এমন প্রায় প্রতিটি কার্যক্রমে খেলেছি এবং ডব্লুপি কোথাও 3 টি চিত্রের আকার তৈরি করে, বা কীভাবে করতে পারে তা খুঁজে পাচ্ছি না এটা আমার।

ডাব্লুপি-অন্তর্ভুক্ত / মিডিয়া.এফপি-তে image_resize()ফাংশনটি দেখে মনে হচ্ছে এটি সবচেয়ে ভাল হবে কারণ এটি ঠিক কী হওয়া উচিত। আমি যে নরক মিস করছি বা কী করার চেষ্টা করেছি কিন্তু চিত্রটির থাম্বনেইলগুলি তৈরি করতে ভুল করেছি তা আমার জীবনের জন্য আমি ঠিক বুঝতে পারি না।

এখানে আমার কার্যকারী ফাংশন যা wp_handle_upload()স্টাফ এবং জিনিসগুলি করে, তবে এটির জন্যও 100px থাম্ব তৈরি করতে হবে এবং চিত্রটির একটি আকার পরিবর্তন করুন যা সর্বোচ্চ 500 প্রস্থের মতো প্রস্থ এবং আপলোড করা ফাইলের নতুন ফাইল হিসাবে সংরক্ষণ করা উচিত।

function update_attachment(){
  global $post;

  wp_update_attachment_metadata( $post->ID, $_POST['a_image'] );

  if( !empty( $_FILES['a_image']['name'] )) { //New upload
    require_once( ABSPATH . 'wp-admin/includes/file.php' );

    $override['action'] = 'editpost';
    $url = wp_handle_upload( $_FILES['a_image'], $override );

    // $medium = image_make_intermediate_size( $uploaded_file['url'], 500, 400, true );
    // $thumb = = image_make_intermediate_size( $uploaded_file['url'], 100, 100, true );

    if ( isset( $file['error'] )) {
      return new WP_Error( 'upload_error', $file['error'] );
    }

    $array_type = wp_check_filetype
    $allowed_file_types = array('image/jpg','image/jpeg','image/gif','image/png');

    $name_parts = pathinfo( $name );
    $name = trim( substr( $name, 0, - ( 1 + strlen( $name_parts['extension'] )) ));

    $type = $file['type'];
    $file = $file['file'];
    $title = $_POST['a_title'] ? $_POST['a_title'] : $name;
    $content = $_POST['a_desc']

    $post_id = $post->ID;
    $attachment = array(
      'post_title' => $title,
      'post_type' => 'attachment',
      'post_content' => $content,
      'post_parent' => $post_id,
      'post_mime_type' => $type,
      'guid' => $url['url']
    );


    // Save the data
    $id = wp_insert_attachment( $attachment, $_FILES['a_image'][ 'file' ]/*, $post_id - for post_thumbnails*/);

    if ( !is_wp_error( $id )) {
      $attach_meta = wp_generate_attachment_metadata( $id, $uploaded_file['url'] );
      wp_update_attachment_metadata( $attach_id, $attach_meta );
    }
    update_post_meta( $post->ID, 'a_image', $uploaded_file['url'] );
  }
}

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

ধন্যবাদ


নীচের বিভিন্ন উত্তরগুলিতে মন্তব্যগুলি দেখুন এবং আমি মনে করি আমি বা @ בניית אתרים বা আমরা উভয়ই আপনার যা প্রয়োজন তা নিয়ে বিভ্রান্ত।
মাইকস্কিঙ্কেল

কেউ কি এর সমাধান করেছে ?? একই ধরণের সমস্যা হচ্ছে, এটি যুগে যুগে ওয়েবকে চালাচ্ছে।

উত্তর:


6

হাই @ জারেদ্বিল্লি:

শহরবাসী! সাহসী প্রচেষ্টা, এবং দুর্দান্ত কাজ। সব মিলিয়ে এটি ওয়ার্ডপ্রেসে একটি দুর্দান্ত সংযোজন হতে পারে।

আপনি এতটা কাছাকাছি ছিলেন তবে আপনার 5 থেকে 10 টির মধ্যে কিছুটা ব্যর্থ অনুমান বা কোড ছিল যা দেখে মনে হচ্ছে আপনি এটি শুরু করেছিলেন কিন্তু এটি কার্যকর হয়নি কারণ এটিতে ফিরে পেলেন না। আমি আপনার ফাংশনটিকে ঠিক যতটা প্রয়োজন ঠিক ততই পুনরায় কাজ করেছি। সমাধানটি অনুসরণ করা হবে, এবং আমি আপনার বা কম পোড়া-পোড়া কারও সাথে পাশাপাশি তুলনা ছেড়ে দেব। :)

function update_attachment() {
  global $post;
  wp_update_attachment_metadata( $post->ID, $_POST['a_image'] );
  if( !empty( $_FILES['a_image']['name'] )) { //New upload
    require_once( ABSPATH . 'wp-admin/includes/file.php' );

    $override['action'] = 'editpost';
    $file = wp_handle_upload( $_FILES['a_image'], $override );

    if ( isset( $file['error'] )) {
      return new WP_Error( 'upload_error', $file['error'] );
    }

    $file_type = wp_check_filetype($_FILES['a_image']['name'], array(
      'jpg|jpeg' => 'image/jpeg',
      'gif' => 'image/gif',
      'png' => 'image/png',
    ));
    if ($file_type['type']) {
      $name_parts = pathinfo( $file['file'] );
      $name = $file['filename'];
      $type = $file['type'];
      $title = $_POST['a_title'] ? $_POST['a_title'] : $name;
      $content = $_POST['a_desc'];

      $post_id = $post->ID;
      $attachment = array(
        'post_title' => $title,
        'post_type' => 'attachment',
        'post_content' => $content,
        'post_parent' => $post_id,
        'post_mime_type' => $type,
        'guid' => $file['url'],
      );

      foreach( get_intermediate_image_sizes() as $s ) {
        $sizes[$s] = array( 'width' => '', 'height' => '', 'crop' => true );
        $sizes[$s]['width'] = get_option( "{$s}_size_w" ); // For default sizes set in options
        $sizes[$s]['height'] = get_option( "{$s}_size_h" ); // For default sizes set in options
        $sizes[$s]['crop'] = get_option( "{$s}_crop" ); // For default sizes set in options
      }

      $sizes = apply_filters( 'intermediate_image_sizes_advanced', $sizes );

      foreach( $sizes as $size => $size_data ) {
        $resized = image_make_intermediate_size( $file['file'], $size_data['width'], $size_data['height'], $size_data['crop'] );
        if ( $resized )
          $metadata['sizes'][$size] = $resized;
      }

      $attach_id = wp_insert_attachment( $attachment, $file['file'] /*, $post_id - for post_thumbnails*/);

      if ( !is_wp_error( $id )) {
        $attach_meta = wp_generate_attachment_metadata( $attach_id, $file['file'] );
        wp_update_attachment_metadata( $attach_id, $attach_meta );
      }
      update_post_meta( $post->ID, 'a_image', $file['url'] );
    }
  }
}

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

পিএস এটি আমার পূর্বের উত্তর। জারেড ঠিক কী জিজ্ঞাসা করছে বুঝতে পেরে আমি এটি পোস্ট করেছি। এটি সঠিক, তবে তাঁর প্রশ্নের সাথে সম্পর্কিত নয়। :)


আমি মনে করি আপনি যা খুঁজছেন তা হ'ল add_image_size():

add_image_size( $size_id, $width, $height, $crop );

উদাহরণ স্বরূপ:

add_image_size('headshot', 130, 150);
add_image_size('large-headshot', 260, 300);

এই ওয়ার্ডপ্রেসটি সেট করে স্বয়ংক্রিয়ভাবে সেই আকারগুলি তৈরি করবে। আপনার যা দরকার তা কি?


আমি সে সম্পর্কে নিশ্চিত নই, তিনি ডিফল্ট মিডিয়া আকার তৈরি করতে বলছেন।
বেন্টারনেট

হুম। ফাংশনটি সেট করা wp_generate_attachment_metadata()থাকলে add_image_size()তা করে। সম্ভবত তিনি add_image_size()চিত্রটির আকার নির্ধারণের চেষ্টা করেন নি ?
মাইকচিন্কেল

হ্যাঁ তবে, জারেডুইলি বলছেন যে ডিফল্ট ওয়ার্ডপ্রেস অন্তর্নির্মিত আকারগুলি (বড়, মাঝারি, থাম্বনেইল) তৈরি করা হচ্ছে না তবে অ্যাড_আইমেজ_সাইজ () ব্যবহার করে অতিরিক্ত সংযোজনযুক্ত আকারগুলি বাড়িয়ে তোলা হবে না either
বেন্টারনেট

অথবা হতে পারে আমি মোটেও প্রশ্নটি পাচ্ছি না :)
বেনারনেট

@ בניית אתרים - আমিও এখন বিভ্রান্ত হয়ে পড়ছি। আমি মনে করি @ জারেদুইলির কাছ থেকে আমাদের এখানে স্পষ্টির অপেক্ষা করতে হবে।
মাইকস্কিঙ্কেল

0

যদি আমি আপনার প্রশ্নটি বুঝতে পারি তবে আপনাকে প্রথমে এই জাতীয় আকারের তালিকাটি পাওয়া দরকার:

$image_sizes = get_intermediate_image_sizes();

এটি নিবন্ধিত সমস্ত চিত্রের আকারের একটি অ্যারে ফেরত দেয় (ডিফল্ট: বৃহত্তর, মাঝারি, থাম্বনেল, "add_image_size ()" ব্যবহার করে নিবন্ধিত যে কোনও কাস্টম আকার) তারপরে আপনাকে যা করতে হবে তা হ'ল প্রতিটি আকারের লুপ ট্রট এবং সেই আকারের জন্য একটি চিত্র তৈরি করুন এই:

$foreach ($image_sizes as $size){
    images[] = image_make_intermediate_size($file, $size['width'], $size['height'], $crop); 
}

আপলোড করা ফাইলের পাথের সাথে ফাইলটি প্রতিস্থাপন করুন এবং you ক্রপটি সত্য বা মিথ্যা দিয়ে যদি আপনি চিত্রটিকে নতুন মাত্রায় ক্রপ করতে চান বা আকার পরিবর্তন করতে মিথ্যা false


@ בניית אתרים - আপনি কোড কটাক্ষপাত করা যদি wp_generate_attachment_metadata()/wp-admin/includes/image.phpআপনি এটা ঠিক কি আপনি উপরের পোস্ট করে দেখতে হবে, এবং তিনি ইতিমধ্যে যে বলা হয়। সুতরাং যদি সেগুলি তৈরি করা হচ্ছে না তবে সম্ভবত তিনি একটি প্লাগইন পেয়েছেন যা 'intermediate_image_sizes_advanced'হুক ব্যবহার করে তাদের ফিল্টার করে ?
মাইকস্কিঙ্কেল

আমি আসলে get_interedia_image_s आकार () ব্যবহার করার চেষ্টা করিনি; আমি জানিনা যে এটি নিবন্ধিত সমস্ত আকার পেয়েছে। যা এখন জেনে ভাল লাগছে। আমি এখনও পুরোপুরি বুঝতে পারি না যে উত্পন্ন চিত্রের মাপগুলি কোনও বিশেষ সংযুক্তির সাথে কীভাবে যুক্ত, যদিও আমি মিডিয়া লাইব্রেরিতে দেখতে চাইলে আপনি 3 আকারের বিকল্প দেখতে পান, কোনটি নির্বাচন করার সময় এটি জানে যে কোন চিত্রটি দখল করতে হবে । ইড্ক, এটি তেমন গুরুত্বপূর্ণ নয়। যদি না হয়। ফোরচ লুপটি করার পরে আমি সংযুক্তি যুক্ত করতে কি পরিবর্তনশীল ব্যবহার করব? $ চিত্রগুলি ['থাম্ব'] বা কিছু (আমি যা আকার চাই)?
jaredwilli

@ בניית אתרים - আমরা দুজনেই প্রথমে আসল সমস্যাটি মিস করেছি। আসল সমস্যাটি ছিল মূল উদাহরণটিতে প্রায় 7 বা 8 কোড ত্রুটি। আমার আপডেট হওয়া উত্তরটি দেখুন।
মাইকচিন্কেল

হ্যাঁ, এখানে দেরি হয়ে গেছে এবং আমি মস্তিষ্কে মৃত ছিল।
বেন্টারনেট

@ בניית אתרים - একই। :)
মাইকস্কিঙ্কেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.