থীমফরেস্টে থীম রিজেক্টের তিনটা টেকনিক্যাল কমন কারণ: যারা এক্সপার্ট তারা সব এগুলা জানেন কিন্তু যারা নতুন তাদের জন্য এই পোস্ট
.
১) Data Validation Issue: ওয়ার্ডপ্রেসে থীম রিজেক্ট খাবার অন্যতম প্রধান কারণ হলো এই ড্যাটা ভ্যালিডেশন .. ধরেন আপনি থীমে একটা কাস্টম মেটা ফিল্ড তৈরি করেছেন … এই মেটা ভ্যালু থীমে ইউজ করার সময় সর্বদা ভ্যালিডেট করে নিতে হবে … ভ্যালিডেট না করলে রিভিউয়ার ধরলে মাইর দিবে গ্যারান্টি
.
ধরেন উদাহরণঃ $my_meta_value = get_post_meta($post_id, $key , $single);
.
.
$my_meta_value
যদি থীমে সরাসরি এভাবে নগ্নভাবে ইউজ করেন হার্ড রিজেক্ট খাবেন একটা সঠিক উদাহরণ হতে পারে এমন
$my_meta_value = get_post_meta($post_id, $key , $single);
এখন $my_meta_value
যদি কোন string হয় তবে এটাকে নিচের মত করে validate করে নিতে পারি …
$my_meta_value = esc_attr ($my_meta_value);
.
.
অথবা,
$my_url = get_post_meta($post_id, $key , $single);
$my_url
মেটা ভ্যালু যদি কোন url হয় তবে এটাকে নিচের মত করে validate করে নিতে পারি
$valid_protocols = array ('http', 'https');
$my_url = esc_url( $my_url, $valid_protocols );
ওয়ার্ডপ্রেস ড্যাটা ভ্যালিডেশনের জন্য প্রচুর ফাংশন রয়েছে … সব ফাংশনের সাথে পরিচিত হতে এখানে ঢু মারেনঃ
https://developer.wordpress.org/apis/security/data-validation/
২) আরেকটি কারণ হল … যে কোন কাস্টম গ্লোবাল ভেরিয়েবল অবশ্যই যথেচ্ছ ভাবে যে কোন জায়গায় ডিক্লেয়ার করা যাবে না … করলে হার্ড রিজেক্ট খাবেন … তবে ওয়ার্ডপ্রসের ন্যাটিভ সব Global Variable যেমনঃ wp_query, $post, $wp_version, $post_type
ইত্যাদি যে কোন জায়গায় ব্যবহার করা যাবে … সমস্যা নাই.
এছাড়া Global Variable ইচ্ছামত যে কোন জায়গায় ডিক্লেয়ার করলে স্ক্রিপ্টের পারফরমেন্সেও বেশ ইফেক্ট পড়ে … এছাড়া conflict হয়ে উলটাপালটা আউটপুট দেখানোর সম্ভাবনাও প্রচুর … যে কোন Custom Declared Global Variable অবশ্যই Custom Function or Class এর ভেতর ডিক্লেয়ার করতে হবে …
That means for example you can’t do.
global $myGlobalVariable;
function MyFunction(){
// do something
}
You are going to get a hard rejection baby ???? …
The proper way is …
function MyFunction(){
global $myGlobalVariable;
// do something
}
৩) থীমে কোন প্লাগিন সেটা থার্ড পার্টি হোক বা নিজের ডেভেলপ করা হোক সরাসরি থীমে ইনক্লুড করে দেয়া যাবে না … এমনকি থীমে ব্যবহার হওয়া নিজের কোড করা শর্ট কোড গুলোও আলাদা প্লাগিনে দিতে হবে …
যদি থীম কোন প্লাগিনের উপর ডিপেন্ডেন্টই হয় … তবে প্লাগিন গুলো TGM Class দিয়ে রিকোয়ার্ড প্লাগিন হিসেবে কল করে দেয়া যাবে …
তবে এখানেও কথা আছে … TGM Class দিয়ে নোটিশ দেখানোর পরেও যদি ইউজার সেই প্লাগিন ইন্সটল না করে … তার পরেও থীম ফুললি ফাংশনাল হতে হবে …
মানে সেই প্লাগিন ছাড়া শুধু সেই প্লাগিনের ফাংশনালিটি বাদ দিয়ে বাকি সব কিছু যেন ঠিক ঠাক মত কাজ করে … অর্থাৎ You have to keep the inclusion of a plugin fully optional not mandatory …
ধরেন আপনার থীম Visual Composer ইউজ করে … এটা আপনি থীমে সরাসরি বাইন্ড না করে আলাদা প্লাগিন হিসেবেই রেখে থীমের সাথে বান্ডিল করে দিবেন …
আর TGM Class দিয়ে ইউজারকে নোটিশ দিবেন “Recommended Plugins” … ইউজারের যদি VC ভালো না লাগে আর সে ইন্সটল না করতে চায় আর ইন্সটল না করে … তারপরেও থীম ঠিক মত কাজ করতে হবে …
এখন তো ইলেমেন্টর ট্রেন্ড চলছে। কাস্টমার ইলেমেন্টর ফ্রেন্ডলি নাও হতে পারে কোডের ভেতরে স্পস্ট কমেন্টি এবং ডকুমেন্টেশনে ক্লিয়ার কন্সেপ্ট দিবেন সব ফাংশন এবং এলেমেন্টস সম্পর্কে।
উপরের ৩ টা থীম হার্ড রিজেক্ট খাবার খুবই কমন কারণ …
সফট রিজেকশন নিয়ে ধীরে ধীরে বলবো । যদিও এনভাটো সফট রিজেকশন এর কারন বলে দেয় এবং সেগুলো ফিক্স করে তারপর আবার আপলোড দিতে বলে কিন্তু হার্ড রিজেকশনের ব্যাপারে কিছুই জানায় না সেজন্য হার্ড রিজকেশন এর কারন আর ফ্যাক্টস গুলো নিয়ে আমাদের আরো সিরিয়াস এবং দ্বায়িত্বশীল হওয়া উচিত
সবাইকে ধন্যবাদ