দেখে মনে হচ্ছে কোডেক্সের অর্ধেক টিউটোরিয়াল এবং ব্লগস্ফিয়ারের ব্যবহার query_posts()এবং অর্ধ ব্যবহারের চারপাশে WP_Query। চুক্তিটি কি ছিল?
দেখে মনে হচ্ছে কোডেক্সের অর্ধেক টিউটোরিয়াল এবং ব্লগস্ফিয়ারের ব্যবহার query_posts()এবং অর্ধ ব্যবহারের চারপাশে WP_Query। চুক্তিটি কি ছিল?
উত্তর:
query_posts()একটি পৃষ্ঠার মূল ক্যোয়ারীটিকে কোয়েরির নতুন উদাহরণ দিয়ে প্রতিস্থাপন করে এটি অতিমাত্রায় সরল এবং সমস্যাযুক্ত উপায়। এটি অদক্ষ (আবার এসকিউএল কোয়েরিগুলি চালায়) এবং কিছু পরিস্থিতিতে সম্পূর্ণ ব্যর্থ হবে (বিশেষত প্রায়শই পোস্ট পৃষ্ঠাগুলি নিয়ে কাজ করার সময়)। যে কোনও আধুনিক ডাব্লুপি কোডকে pre_get_postsএই উদ্দেশ্যে হুক ব্যবহারের মতো আরও নির্ভরযোগ্য পদ্ধতি ব্যবহার করা উচিত । টিএল; ডিআর কখনই ক্যোয়ারী_পোস্টগুলি () ব্যবহার করবেন না ।
get_posts() ব্যবহারের ক্ষেত্রে খুব অনুরূপ এবং একই যুক্তিগুলি গ্রহণ করে (কিছু ডিভান্স সহ বিভিন্ন ডিফল্ট হিসাবে) তবে পোস্টগুলির একটি অ্যারে প্রদান করে, বৈশ্বিক পরিবর্তনগুলি সংশোধন করে না এবং যে কোনও জায়গায় ব্যবহার করা নিরাপদ।
WP_Queryএমন এক শ্রেণি যা উভয় পর্দার পিছনেই শক্তি দেয় তবে আপনি এটি তৈরি করতে এবং এটির নিজের উদাহরণ দিয়েও কাজ করতে পারেন। কিছুটা জটিল, কম সীমাবদ্ধতা, যে কোনও জায়গায় ব্যবহার করা নিরাপদ।
query_posts()হ'ল ক্ষুদ্র মোড়ক ফাংশন WP_Query, এটি কেবলমাত্র অতিরিক্ত কাজ করে (ফ্লোচার্ট অনুসারে) $wp_query
query_posts()করা WP_Queryপারফরম্যান্সে কোনও পার্থক্য তৈরি করবে না, মূল পৃষ্ঠার ক্যোয়ারী এখনও চলবে কারণ এটি মূল বোঝার অংশ। আপনার টেম্পলেট ফাইলটির কোনও লুপ না থাকলেও এই অনুসন্ধানগুলি চলবে।
query_posts করে না , এটি ইতিমধ্যে এটি চালানোর পরে এটি প্রতিস্থাপন করে । প্রধান লুপটি সংশোধন করার সর্বোত্তম উপায় হ'ল ফিল্টার। বিকাশকারী.ওয়ার্ডপ্রেস.কমpre_get_posts
query_posts- আপনার কখনই ব্যবহার করা উচিত নয় query_posts। @ রার্স্ট যা বলেছে তা বাদে, সত্যই বড় সমস্যাটি query_postsহ'ল এটি মূল ক্যোয়ারী অবজেক্টকে (সঞ্চিত $wp_query) ভেঙে দেয় । প্রচুর প্লাগইন এবং কাস্টম কোড মূল ক্যোয়ারী অবজেক্টের উপর নির্ভর করে, তাই মূল ক্যোয়ারী অবজেক্টটি ভাঙার অর্থ আপনি প্লাগইন এবং কাস্টম কোডের কার্যকারিতা ভঙ্গ করছেন। যেমন একটি ফাংশন হ'ল সমস্ত গুরুত্বপূর্ণ পৃষ্ঠাগুলি ফাংশন, সুতরাং আপনি যদি মূল ক্যোয়ারীটি ভাঙ্গেন তবে আপনি পৃষ্ঠাটি ভাঙেন।
যে query_postsকোনও টেম্পলেটে কতটা খারাপ তা প্রমাণ করার জন্য, নিম্নলিখিতটি করুন এবং ফলাফলগুলি তুলনা করুন
var_dump( $wp_query );
query_posts( '&posts_per_page=-1' );
var_dump( $wp_query );
get_postsএবং মাধ্যমিক প্রশ্নগুলি ( সম্পর্কিত পোস্ট, স্লাইডার, বৈশিষ্ট্যযুক্ত সামগ্রী এবং স্ট্যাটিক প্রথম পৃষ্ঠাগুলির সামগ্রীর মতো)WP_Query তৈরির সঠিক উপায় । এটি লক্ষ করা উচিত, আপনি হোম পৃষ্ঠায়, একক পৃষ্ঠায় বা কোনও ধরণের সংরক্ষণাগার পৃষ্ঠায় মূল প্রশ্নের সন্ধানের জন্য দু'এর একটিও ব্যবহার করবেন না কারণ এটি পৃষ্ঠার কার্যকারিতা ভঙ্গ করবে। আপনার যদি মূল ক্যোয়ারীটি সংশোধন করতে হয় তবে তা করার জন্য ব্যবহার করুন এবং কাস্টম কোয়েরি নয়। ( আপডেট): স্ট্যাটিক সম্মুখ পৃষ্ঠাগুলি এবং সত্য পৃষ্ঠাগুলির জন্য, সত্য পৃষ্ঠাগুলি এবং স্থির সম্মুখ পৃষ্ঠাগুলিতে pre_get_posts ব্যবহার করে দেখুন *)pre_get_posts
সংক্ষেপে, WP_Queryমূল ক্যোয়ারী দ্বারা ব্যবহৃত হয় এবং এটি দ্বারা ব্যবহৃত হয় get_posts, তবে যদিও get_posts()ব্যবহার হয় তবে WP_Queryকয়েকটি পার্থক্য রয়েছে
get_postsতুলনায় দ্রুত WP_Query। মার্জিন সাইটের মোট পোস্টের পরিমাণের উপর নির্ভর করে। এর কারণ হ'ল, ডিফল্টরূপে get_postsচলে যায় যেখানে কোনও এড়িয়ে যায় / আইনত প্যাজিগেশন ভাঙে। এর সাথে , পোস্টগুলির পরিমাণ জিজ্ঞাসিত হয়, পরে ব্যাল আউট হয়ে যায়, যেখানে ডিফল্টরূপে এটি পৃষ্ঠাগুলি গণনা করার জন্য ক্যোয়ারীর সাথে মেলে সমস্ত পোস্ট অনুসন্ধান করে।'no_found_rows' => trueWP_Query'no_found_rows' => trueWP_Query
এই কারণে, get_posts()কেবলমাত্র অচিহ্নবদ্ধ প্রশ্নের জন্য ব্যবহার করা উচিত। প্যাটিং get_postsকরা সত্যিই একটি বড় জগাখিচুড়ি। WP_Queryসমস্ত পৃষ্ঠাযুক্ত প্রশ্নের জন্য ব্যবহার করা উচিত
get_posts()এই ফিল্টারগুলি দ্বারা প্রভাবিত হয় posts_*যেখানে ফিল্টার দ্বারা প্রভাবিত হয় না WP_Query। কারণ যে get_posts, ডিফল্টরূপে, পাসের 'suppress_filters' => trueজন্যWP_Query
get_postsমত অতিরিক্ত পরামিতি একটি দম্পতি আছে include, exclude, numberpostsএবং category। এই পরামিতিগুলি WP_Queryপাস করার আগে বৈধ পরামিতিগুলিতে পরিবর্তিত হয় WP_Query। includeপরিবর্তিত হয় post__in, excludeমধ্যে post__not_in, categoryমধ্যে catএবং numberpostsমধ্যে posts_per_page। কেবলমাত্র একটি নোট, সমস্ত প্যারামিটার যা দিয়ে WP_Queryকাজ করা যেতে পারে get_posts, আপনি সেগুলির ডিফল্ট পরামিতিগুলি উপেক্ষা করতে এবং ব্যবহার করতে পারবেন নাget_posts
get_postsসম্পূর্ণ বস্তুটি ফেরত দেওয়ার সময় কেবল তার $postsসম্পত্তি প্রদান করে । শর্তসাপেক্ষ, পৃষ্ঠাবদ্ধকরণ এবং লুপের অভ্যন্তরে ব্যবহার করা যেতে পারে এমন অন্যান্য দরকারী তথ্যের ক্ষেত্রে এই অবজেক্টটি বেশ কার্যকর।WP_QueryWP_Query
get_postsলুপ ব্যবহার করে না, তবে foreachপোস্টগুলি প্রদর্শনের জন্য একটি লুপ ব্যবহার করে । এছাড়াও, কোনও টেম্পলেট ট্যাগ ডিফল্টরূপে উপলব্ধ। setup_postdata( $post )টেমপ্লেট ট্যাগগুলি উপলভ্য করতে ব্যবহার করতে হবে। WP_Queryলুপ এবং টেমপ্লেট ট্যাগগুলি ডিফল্টরূপে উপলব্ধ
get_postsএ চলে 'ignore_sticky_posts' => 1যায় WP_Query, তাই get_postsডিফল্টরূপে স্টিকি পোস্টগুলিকে উপেক্ষা করে
উপরের উপর ভিত্তি করে, ব্যবহার করতে হবে get_postsবা আপনার উপর নির্ভর করে WP_Queryএবং কোয়েরি থেকে আপনার আসলে কী দরকার। উপরেরগুলি আপনার পছন্দমতো আপনাকে গাইড করবে
মূল পার্থক্যটি হ'ল query_posts()কেবলমাত্র বর্তমান লুপটি সংশোধন করার জন্য। একবার শেষ হয়ে গেলে লুপটি পুনরায় সেট করা এবং এটি তার আনন্দের পথে প্রেরণ করা প্রয়োজন। এই পদ্ধতিটি বোঝার জন্যও কিছুটা সহজ, কেবল কারণ আপনার "ক্যোয়ারী" মূলত একটি ইউআরএল স্ট্রিং যা আপনি ফাংশনে পৌঁছান, তেমন:
query_posts('meta_key=color&meta_value=blue');
অন্যদিকে, WP_Queryএকটি সাধারণ উদ্দেশ্য হাতিয়ার বেশি, এবং আরও সরাসরি মাইএসকিউএল প্রশ্নের লেখার চেয়ে ভালো হয় query_posts()হয়। আপনি এটিকে যে কোনও জায়গায় (কেবলমাত্র লুপে নয়) ব্যবহার করতে পারেন এবং এটি বর্তমানে চলমান কোনও পোস্ট প্রশ্নের সাথে হস্তক্ষেপ করে না।
আমি WP_Queryআরও প্রায়ই ব্যবহার করার ঝোঁক , যেমন এটি হয়। সত্যিই, এটি আপনার নির্দিষ্ট ক্ষেত্রে নেমে আসতে চলেছে।
ব্যবহার করার দরকার নেই query_posts()। এটি যা করে তা হ'ল একটি নতুন ডাব্লুপি_কিউয়ারি আইটেমটি ইনস্ট্যান্ট করে এবং সেই নতুন অবজেক্টটিকে পুনরায় নিযুক্ত করে global wp_query।
রেফারেন্সের জন্য, নিম্নলিখিতটি আসল query_posts()ফাংশন।
function query_posts($query) {
$GLOBALS['wp_query'] = new WP_Query();
return $GLOBALS['wp_query']->query($query);
}
আপনি যদি গভীরতার কাস্টম কোয়েরি স্ক্রিপ্ট তৈরি করতে চান তবে আপনার নিজের WP_Query অবজেক্টটি ইনস্ট্যান্ট করুন। বা get_posts()আপনাকে যা করতে হবে তা ব্যবহার করুন এখানে এবং সেখানে কিছু হালকা ম্যানিপুলেশন।
উভয় ক্ষেত্রেই, আমি নিজেকে অত্যন্ত অনুগ্রহ wp_includes/query.phpকরে WP_Queryক্লাসে যাওয়া এবং অনুধাবন করার পরামর্শ দিচ্ছি ।
নিশ্চিত হয়ে নিন যে আপনি ব্যবহারের wp_reset_query()পরে ব্যবহার করেছেন query_posts()কারণ এটি অন্যান্য প্রশ্নের ফলাফলকেও প্রভাবিত করবে।