ওয়ার্ডপ্রেস টেমপ্লেট লোডারটি অনেক পরিস্থিতিতে উপযুক্ত প্রাসঙ্গিক টেম্পলেট ফাইল অন্তর্ভুক্ত করবে, এমনকি যদি সেই প্রসঙ্গে অনুসন্ধানের জন্য কোনও পোস্ট না দেয়। উদাহরণ স্বরূপ:
- মূল ব্লগ পোস্ট সূচি
- বিভাগ সংরক্ষণাগার সূচী (বিভাগ বিদ্যমান, কিন্তু কোনও পোস্ট নেই)
- ট্যাগ সংরক্ষণাগার সূচী (ট্যাগ বিদ্যমান, কিন্তু কোনও পোস্ট নেই)
- লেখক সংরক্ষণাগার সূচী (লেখকের উপস্থিতি রয়েছে, তবে তার কোনও পোস্ট নেই)
- অনুসন্ধান ফলাফল সূচি
সুতরাং, এই ক্ষেত্রে, উপযুক্ত টেম্পলেট ফাইলটি লোড হবে, তবে কোনও পোস্ট আউটপুট হবে না, কারণ কোয়েরিতে কোনও পোস্ট দেয় না।
প্রুফ অফ কনসেপ্ট উদাহরণ:
সুতরাং, এই প্রসঙ্গে, টেমপ্লেট ফাইলকে if ( have_posts() )
শর্তযুক্ত অন্তর্ভুক্ত করার জন্য এটি দরকারী is
অন্যান্য প্রসঙ্গে, কোয়েরিতে কোনও পোস্ট না দিলে টেমপ্লেট ফাইলটি কখনই লোড হবে না। উদাহরণ স্বরূপ:
- একক ব্লগ পোস্ট
- স্থির পৃষ্ঠা
এই প্রসঙ্গে, if ( have_posts() )
সম্ভবত অপ্রয়োজনীয়।
সম্পাদন করা
আমি বুঝেছি ক্যোয়ারীটি_পোস্ট () দ্বারা ডাকা হয়েছে, তাই না? এবং যদি (have_posts ()) বিদ্যমান থাকে তবে পোস্ট না থাকলে কোয়েরি কখনই ঘটে না।
কী চলছে তা বোঝার জন্য আপনাকে ওয়ার্ডপ্রেস ক্রিয়াকলাপটি দেখতে হবে । দিয়ে শুরু করা wp_loaded
(এবং কিছু পরিষ্কার করার জন্য বাদ দেওয়া):
wp_loaded
parse_request
send_headers
parse_query
pre_get_posts
wp
template_redirect
get_header
wp_head
the_post
wp_footer
সুতরাং, কি ঘটছে, এবং কোন ক্রমে?
- ক্যোয়ারীটি আহ্বান করা হয়েছে:
parse_query
pre_get_posts
wp
- টেমপ্লেটটি নির্বাচিত হয়েছে:
- টেমপ্লেটটি লোড / আউটপুট। নিম্নলিখিত ক্রিয়াকলাপগুলি টেমপ্লেট দ্বারা বরখাস্ত করা হয়েছে :
get_header
wp_head
the_post
dynamic_sidebar
get_footer
wp_footer
সুতরাং, the_post
দ্বারা বরখাস্ত করা the_post()
, ক্যোরিয়াকে পার্স করার পরে , পোস্টগুলি আনার পরে এবং টেমপ্লেটটি লোড হওয়ার পরে ঘটে ।
আমি খুব কৃতজ্ঞ যে আপনি প্রচুর তথ্য দেন যা আমি জানতাম না, তবে আমি যা চাইছিলাম তা এটি নয়।
ওহ, তবে আমি বিশ্বাস করি যে এটি আপনি যা চেয়েছিলেন ঠিক তেমনই।
আসল প্রশ্নটি: একটি বৈধ কোয়েরি রিটার্ন কী? বিভাগ আর্কাইভ সূচী হিসাবে প্রসঙ্গে, কোয়েরিটি বৈধ, এবং বিভাগের আইডি উপস্থিত থাকলেও বিভাগের টেম্পলেটটি লোড করা হয়, এমনকি যদি এই বিভাগে কোনও পোস্ট বরাদ্দ না থাকে তবেও ।
কেন? কারণ বিশ্লেষণ করা ক্যোয়ারীটি হ'ল (আইআইআরসি) &cat={ID}
- যা কোনও বিভাগের জন্য বরাদ্দকৃত কোনও পোস্ট না থাকলেও এটি একটি বৈধ কোয়েরি , এবং এভাবে পার্সিংয়ের পরে 404-এ ফলাফল আসে না।
সেক্ষেত্রে আপনি একটি বৈধ প্রশ্ন, এবং একটি টেমপ্লেট ফাইল লোড পেয়েছেন তবে কোনও পোস্ট নেই । সুতরাং, if ( have_posts() )
, , আসলে হয় প্রাসঙ্গিক। আবার, এখানে একটি উদাহরণ রয়েছে: বিভাগটি বিদ্যমান, তবে কোনও পোস্ট বরাদ্দ করা হয়নি। ক্যাটাগরি টেম্পলেট ফাইলটি if ( have_posts() )
ফিরে আসার সাথে লোড হয়false
।
এটি কোনও পোস্ট ভেরিয়েবল ( &p={ID}
) যেমন একক ব্লগ পোস্ট এবং স্থিতিশীল পৃষ্ঠাগুলি অন্তর্ভুক্ত করে এমন প্রশ্নের জন্য সত্য হবে না কারণ পোস্টটি আসলে উপস্থিত থাকবে না এবং যখন বিশ্লেষণ করা হবে তখন কোয়েরিটি কোনও বৈধ অবজেক্টকে ফিরিয়ে দেবে না।
সম্পাদনা 2
যদি আমি যথাযথভাবে বুঝতে পারি যে কোনও বিভাগের টেম্পলেটে (has_posts ()) নেই এবং বিভাগটির কোনও পোস্ট নেই, তবে এটি 404.php ফিরে আসে, যদিও এটি পোস্ট ছাড়াই বিভাগ-নমুনা.পিএফপি হওয়া উচিত। এটা কি সঠিক?
না। মনে রাখবেন: টেমপ্লেটটি নির্বাচিত হয়েছে template_redirect
। সুতরাং যদি কোয়েরিটি বৈধ হয়, তবে উপযুক্ত টেম্পলেট ফাইলটি লোড হবে। যদি কোয়েরিটি বৈধ নয়, তবে 404 টেমপ্লেট লোড হবে।
সুতরাং, একবার কোনও টেম্পলেট লোড হয়ে যায় - যেমন বিভাগের টেম্পলেট - একবার লুপ আউটপুট হয়ে গেলে, টেমপ্লেটটি পরিবর্তন হয় না ।
ক্রমের ক্রমটি আবার দেখুন:
parse_query
pre_get_posts
wp
template_redirect
- টেমপ্লেট এখানে চয়ন এবং লোড করা হয়। এটি কোনও প্রত্যাবর্তনের টেমপ্লেট পয়েন্ট । এই বিন্দু পরে টেমপ্লেট পরিবর্তন করা যাবে না।
- ...
the_post
- লুপ কলের অংশ হিসাবে পোস্টডেটা এখানে সেটআপ করা আছে। এটাকে বলা হয় টেমপ্লেট ভিতরে , এবং টেমপ্লেট পরিবর্তন করে না ক্যোয়ারী বস্তুর পাওয়া তথ্যের উপর ভিত্তি করে
চূড়ান্ত সম্পাদনা
এবং আমি দাবি করছি যে পদগুলির অস্তিত্ব যাচাই করার সময় কেন আমি একই পরীক্ষা দুটি করে চালাব। এটি আমার প্রথম প্রশ্ন থেকেই আমি কেবল এটি সম্পর্কে জিজ্ঞাসা করছি।
এবং তার সাথে, আমি শেষ পর্যন্ত বুঝতে পারি: সব মিলিয়ে আপনার প্রশ্নের ওয়ার্ডপ্রেস , বা ওয়ার্ডপ্রেস লুপের সাথে কোনও সম্পর্ক ছিল না । আপনি শর্তসাপেক্ষে যে কোনও নির্বিচার পিএইচপি while
লুপ মোড়ানো সম্পর্কে জিজ্ঞাসা করছেন যা if
একই শর্তটি পরীক্ষা করে।
এই প্রশ্নটি ডাব্লুপিএসইয়ের আওতার বাইরে, তবে আমি সংক্ষেপে ব্যাখ্যা করব:
একটি if
শর্তাধীন একটি বাইনারি মূল্যায়ন হল: এটা হয় এর true
বা false
, এবং সেখানে কি ঘটছে ভিতরে যে শর্তাধীন এর মৃত্যুদন্ড কার্যকর করা হয় একবার ।
একটি while
শর্তাধীন একটি হল লুপ : এটা, কিছু বিযুক্ত সময়ের জন্য অবশেষ সত্য পাল্টা কিছু বাছাই উপর ভিত্তি করে; এবং এই শর্তাধীনটির ভিতরে কী ঘটে তা বেশ কয়েকবার কার্যকর করা হয় - কাউন্টারটির প্রতিটি পুনরাবৃত্তির জন্য একবার ।
সুতরাং, আসুন আমরা বলে রাখি যে আপনি যদি জিনিসগুলির তালিকাটি জনবহুল হয় তবে আপনি কোনও আনর্ডারড থাকা তালিকা আউটপুট করতে চান। আপনি যদি একটি while
লুপ ব্যবহার করেন এবং মোড়কটি বাদ দেন তবে if
আপনার মার্কআপটি দেখতে এই রকম হবে:
<ul>
<?php while ( list_of_things() ) : ?>
<li><?php the_list_item(); ?></li>
<?php endwhile; ?>
</ul>
এবং যদি list_of_things()
খালি থাকে তবে রেন্ডার আউটপুটটি হ'ল:
<ul>
</ul>
যা অপ্রয়োজনীয় (এবং অবৈধ) মার্কআপ ছেড়ে দেয়।
তবে আপনি যদি if
শর্তসাপেক্ষ মোড়ক যুক্ত করেন তবে আপনি এটি করতে পারেন:
<?php if ( list_of_things() ) : ?>
<ul>
<?php while ( list_of_things() ) : ?>
<li><?php the_list_item(); ?></li>
<?php endwhile; ?>
</ul>
<?php endif; ?>
এবং যদি list_of_things()
খালি থাকে তবে কোনও চিহ্নআপ আউটপুট হবে না।
এটি কেবল একটি উদাহরণ। এই if
শর্তসাপেক্ষ মোড়কের জন্য প্রচুর ব্যবহার রয়েছে এবং if
শর্তসাপেক্ষ মোড়ক লুপের চেয়ে সম্পূর্ণ ভিন্ন উদ্দেশ্যে কাজ করে while
।