ফিলিপ, আপনি যদি নিজের মন এতে সেট করেন তবে কিছু সম্ভব। আপনি ওয়ার্ডপ্রেস ইমেজ সম্পাদক শ্রেণীর বাড়িয়ে আপনার সমস্যাটি সমাধান করতে পারেন।
দ্রষ্টব্য আমি ওয়ার্ডপ্রেস ৩.7 ব্যবহার করছি - আমি পূর্ববর্তী সংস্করণে এবং সর্বশেষতম 3.8 প্রকাশে নীচের কোডগুলির কোনওটি চেক করিনি।
চিত্র সম্পাদক বুনিয়াদি
ওয়ার্ডপ্রেস দুটি ক্লাসে নির্মিত যা ইমেজ ম্যানিপুলেশন পরিচালনা করে:
WP_Image_Editor_GD
( /wp-includes/class-wp-image-editor-gd.php
)
WP_Image_Editor_Imagick
( /wp-includes/class-wp-image-editor-imagick.php
)
এই দুটি ক্লাস প্রসারিত হয়েছে WP_Image_Editor
কারণ তারা উভয়ই চিত্র লোড, পুনরায় আকার, সংকোচন এবং সংরক্ষণ করতে একটি পৃথক চিত্র ইঞ্জিন (যথাক্রমে জিডি এবং চিত্রম্যাগিক) ব্যবহার করে।
ডিফল্টরূপে ওয়ার্ডপ্রেস প্রথমে চিত্রম্যাগিক ইঞ্জিনটি ব্যবহার করার চেষ্টা করবে, যার পিএইচপি এক্সটেনশন প্রয়োজন, কারণ এটি সাধারণত পিএইচপি'র ডিফল্ট জিডি ইঞ্জিনের চেয়ে বেশি পছন্দ করা হয়। সর্বাধিক ভাগ করা সার্ভারগুলিতে চিত্রম্যাগিক এক্সটেনশন সক্ষম করা নেই।
একটি চিত্র সম্পাদক যুক্ত করুন
কোন ইঞ্জিনটি ব্যবহার করবেন তা স্থির করার জন্য, ওয়ার্ডপ্রেস একটি অভ্যন্তরীণ ফাংশন কল করে __wp_image_editor_choose()
(এটি অবস্থিত /wp-includes/media.php
)। কোন ইঞ্জিনটি অনুরোধটি পরিচালনা করতে পারে তা দেখতে এই ইঞ্জিনটি সমস্ত ইঞ্জিনের মধ্য দিয়ে যায়।
ফাংশনটিতে একটি ফিল্টারও রয়েছে যা wp_image_editors
আপনাকে আরও বেশি ছবি সম্পাদকদের যুক্ত করতে দেয়:
add_filter("wp_image_editors", "my_wp_image_editors");
function my_wp_image_editors($editors) {
array_unshift($editors, "WP_Image_Editor_Custom");
return $editors;
}
নোট করুন আমরা আমাদের কাস্টম ইমেজ এডিটর ক্লাসটি প্রেন্ডিং করছি WP_Image_Editor_Custom
যাতে ওয়ার্ডপ্রেস পরীক্ষা করে দেখবে যে অন্য ইঞ্জিনগুলি পরীক্ষা করার আগে আমাদের ইঞ্জিনটি আকার পরিবর্তন করতে পারে কিনা।
আমাদের চিত্র সম্পাদক তৈরি করা হচ্ছে
এখন আমরা আমাদের নিজস্ব চিত্র সম্পাদক লিখব যাতে আমরা নিজেরাই ফাইলের নামগুলি স্থির করতে পারি। ফাইলনামিং পদ্ধতি দ্বারা পরিচালিত হয় WP_Image_Editor::generate_filename()
(উভয় ইঞ্জিনই এই পদ্ধতির উত্তরাধিকারী হয়), সুতরাং আমাদের এটি আমাদের কাস্টম শ্রেণিতে ওভাররাইট করা উচিত।
যেহেতু আমরা কেবল ফাইলের নাম পরিবর্তন করার পরিকল্পনা করছি তাই আমাদের বিদ্যমান ইঞ্জিনগুলির মধ্যে একটি বাড়ানো উচিত যাতে আমাদের চাকাটি পুনরায় উদ্ভাবন করতে না হয়। আমি WP_Image_Editor_GD
আমার উদাহরণটিতে প্রসারিত করব, কারণ আপনার সম্ভবত চিত্রম্যাগিক এক্সটেনশন সক্ষম নেই। কোডটি ইমেজম্যাগিক সেটআপের জন্য হলেও বিনিময়যোগ্য। আপনি যদি বিভিন্ন সেটআপে থিমটি ব্যবহার করার পরিকল্পনা করছেন তবে আপনি উভয়ই যুক্ত করতে পারেন।
// Include the existing classes first in order to extend them.
require_once ABSPATH.WPINC."/class-wp-image-editor.php";
require_once ABSPATH.WPINC."/class-wp-image-editor-gd.php";
class WP_Image_Editor_Custom extends WP_Image_Editor_GD {
public function generate_filename($prefix = NULL, $dest_path = NULL, $extension = NULL) {
// If empty, generate a prefix with the parent method get_suffix().
if(!$prefix)
$prefix = $this->get_suffix();
// Determine extension and directory based on file path.
$info = pathinfo($this->file);
$dir = $info['dirname'];
$ext = $info['extension'];
// Determine image name.
$name = wp_basename($this->file, ".$ext");
// Allow extension to be changed via method argument.
$new_ext = strtolower($extension ? $extension : $ext);
// Default to $_dest_path if method argument is not set or invalid.
if(!is_null($dest_path) && $_dest_path = realpath($dest_path))
$dir = $_dest_path;
// Return our new prefixed filename.
return trailingslashit($dir)."{$prefix}/{$name}.{$new_ext}";
}
}
উপরের বেশিরভাগ কোড সরাসরি WP_Image_Editor
ক্লাস থেকে অনুলিপি করা হয়েছিল এবং আপনার সুবিধার্থে মন্তব্য করেছিল। একমাত্র আসল পরিবর্তনটি হল প্রত্যয়টি এখন একটি উপসর্গ।
বিকল্পভাবে, আপনি কেবল প্রত্যয়টি একটি উপসর্গে পরিবর্তন parent::generate_filename()
করতে কল করতে এবং ব্যবহার mb_str_replace()
করতে পারেন , তবে আমি বুঝতে পেরেছিলাম যে ভুল হতে আরও ঝোঁক হবে।
মেটাডেটাতে নতুন পাথ সংরক্ষণ করা হচ্ছে
আপলোড করার পরে image.jpg
, আপলোডগুলি ফোল্ডারটি দেখে মনে হচ্ছে:
2013/12/150x150/image.jpg
2013/12/300x300/image.jpg
2013/12/image.jpg
এ পর্যন্ত সব ঠিকই. যাইহোক, বেসিক ফাংশনগুলির মতো কল করার সময় wp_get_attachment_image_src()
, আমরা লক্ষ্য করব যে সমস্ত চিত্রের আকারগুলি image.jpg
নতুন ডিরেক্টরি পাথ ব্যতীত সঞ্চিত রয়েছে ।
আমরা ইমেজ মেটাটাটাতে (যেখানে ফাইলের নাম সংরক্ষণ করা আছে) নতুন ফোল্ডারের কাঠামো সংরক্ষণ করে এই সমস্যাটি নিয়ে কাজ করতে পারি। বিভিন্ন ফিল্টার (মাধ্যমে তথ্য রানে wp_generate_attachment_metadata
আগে অন্যদের মধ্যে) ডাটাবেসের মধ্যে ঢোকানো হচ্ছে, কিন্তু যেহেতু আমরা ইতিমধ্যে একটি কাস্টম চিত্র সম্পাদক বাস্তবায়ন করবেন, আমরা তা ছবির আকার মেটাডেটা উৎস ফিরে ভ্রমণ করতে পারেন: WP_Image_Editor::multi_resize()
। এটি এর মতো অ্যারে তৈরি করে:
Array (
[thumbnail] => Array (
[file] => image.jpg
[width] => 150
[height] => 150
[mime-type] => image/jpeg
)
[medium] => Array (
[file] => image.jpg
[width] => 300
[height] => 300
[mime-type] => image/jpeg
)
)
আমরা multi_resize()
আমাদের কাস্টম শ্রেণিতে পদ্ধতিটি ওভাররাইট করব :
function multi_resize($sizes) {
$sizes = parent::multi_resize($sizes);
foreach($sizes as $slug => $data)
$sizes[$slug]['file'] = $data['width']."x".$data['height']."/".$data['file'];
return $sizes;
}
যেমন আপনি দেখতে পাচ্ছেন, আমি কোনও কোড প্রতিস্থাপনের বিরক্ত করিনি। আমি কেবল প্যারেন্ট পদ্ধতিতে কল করি এবং এটিকে মেটাডেটা তৈরি করতে দিই। তারপরে আমি ফলাফলের অ্যারেটি লুপ করব এবং file
প্রতিটি আকারের জন্য মান সামঞ্জস্য করি ।
এখন wp_get_attachment_image_src($att_id, array(300, 300))
ফিরে 2013/12/300x300/image.jpg
। হুররে!
সর্বশেষ ভাবনা
আমি আশা করি এটি আপনার বিস্তারিত জানার জন্য একটি ভাল ভিত্তি সরবরাহ করেছে। তবে দয়া করে নোট করুন যদি কোনও চিত্র নির্দিষ্ট আকারের চেয়ে ছোট (যেমন 280x300), উত্পন্ন প্রত্যয় (আমাদের ক্ষেত্রে উপসর্গ) এবং চিত্রের আকারগুলি 300x300 নয় 280x300 হয়। আপনি যদি অনেক ছোট ছবি আপলোড করেন তবে আপনি প্রচুর আলাদা ফোল্ডার পাবেন।
একটি ভাল সমাধান হয় যেমন একটি ফোল্ডার নাম (আকার স্লাগ্ ব্যবহার করতে হবে small
, medium
, ইত্যাদি) অথবা নিকটতম পছন্দের ছবির আকার বৃত্তাকার মাপ কোড আপ প্রসারিত।
আপনি উল্লেখ করেছেন যে আপনি কেবলমাত্র প্রশস্তিকে ডিরেক্টরি নাম হিসাবে ব্যবহার করতে চান। যদিও সতর্কতা অবলম্বন করুন - প্লাগইন বা থিমগুলি একই প্রস্থের সাথে ভিন্ন ভিন্ন উচ্চতা সহ দুটি পৃথক আকারের উত্পাদন করতে পারে।
এছাড়াও, আপনি সেটিংস> মিডিয়া এর অধীনে 'আমার আপলোডগুলি মাসে- এবং বছর-ভিত্তিক ফোল্ডারগুলিকে সংগঠিত করুন' অক্ষম করে বা আরও কিছু চালিয়ে যাওয়ার মাধ্যমে বছর / মাসের ফোল্ডারগুলি সরাতে পারেন generate_filename
।
আশাকরি এটা সাহায্য করবে. শুভকামনা!