সমস্যাটি
আপনার আঁকড়ে ধরার সমস্যা যা হ'ল "আমি কীভাবে এক্স করব?" এটি 1 পদক্ষেপের ক্রিয়া নয়, এটি একটি মাল্টিস্টেপ প্রক্রিয়া এবং এটি পৃথকীকরণের প্রয়োজন।
আপনার এটি করার দরকার নেই:
get all the posts that are a child of X ordered by meta
আপনার এটি করা দরকার:
get all the posts that are a child of X
for each child, get all the posts that are a child
foreach child of that child get all the posts that are a child
...
hmmm we don't have any more children left
Take our list of posts and order them by meta
সাধারণ সমাধান
সুতরাং, হার্ডকডিং না করে আপনি কীভাবে অসীমভাবে এটি শেষ করবেন তা বোঝার জন্য আপনাকে পুনরাবৃত্ত ক্রিয়াকলাপগুলি বুঝতে হবে।
যেমন
function make_zero( $amount ) {
$amount = $amount - 1;
if ( $amount > 1 ){
return make_zero( $amount );
}
return $amount;
}
কোনও সমস্যার সমাধানের জন্য পুনরাবৃত্তি প্রয়োগ করা
সুতরাং আপনার পিতামাতা $parid
, এবং আপনার পোস্ট মেটার একটি চাবি আছে $metakey
।
এর বাচ্চাদের ধরার জন্য এটি কোনও ফাংশনে প্রবেশ করতে দিন।
$children = get_children_with_meta( $parid, $metakey );
তারপরে আমরা $ শিশুদের অ্যারে বাছাই করব, কীগুলি পোস্ট আইডি হবে এবং মানগুলি হবে মেটা মান।
asort($children);
এবং ফাংশনটিকে এই হিসাবে সংজ্ঞায়িত করতে দেয়:
function get_children_with_meta( $parent_id, $metakey ) {
$q = new WP_Query( array( 'post_parent' => $parent_id, 'meta_key' => $metakey ));
if ( $q->have_posts() ) {
$children - array();
while ( $q->have_posts() ) {
$q->the_post();
$meta_value = get_post_meta(get_the_ID(), $metakey, true );
$children[get_the_ID() ] = $meta_value;
}
return $children;
} else {
// there are no children!!
return array();
}
}
এটি আপনাকে সর্বনিম্ন থেকে সর্বোচ্চে অর্ডার করা পোস্ট আইডি এবং মানগুলির একটি অ্যারে দেয়। আপনি অন্যান্য পিএইচপি বাছাই ফাংশন এটি সর্বোচ্চ থেকে নীচে করার জন্য ব্যবহার করতে পারেন।
এখন বাচ্চাদের বাচ্চাদের কী হবে?
আমাদের লুপের মাঝামাঝি সময়ে, আমাদের পিতামাতাদের আইডির চেয়ে সন্তানের মধ্যে পাস করে একটি পুনরাবৃত্ত কল করতে হবে।
সুতরাং এই:
$q->the_post();
$meta_value = get_post_meta(get_the_ID(), $metakey, true );
$children[get_the_ID() ] = $meta_value;
এটি হয়ে:
$q->the_post();
$meta_value = get_post_meta(get_the_ID(), $metakey, true );
$children[get_the_ID() ] = $meta_value;
// now get the childrens children
$grandchildren = get_children_with_meta( get_the_ID(), $metakey );
// merge the grandchildren and the children into the same list
$children = array_merge( $children, $grandchildren );
এই পরিবর্তনের মাধ্যমে ফাংশনটি এখন শিশুদের, শিশুদের শিশুদের, শিশুদের বাচ্চাদের ..... ইত্যাদি পুনরুদ্ধার করে
শেষে আপনি এই জাতীয় আইডি পেতে অ্যারের মানগুলি ছাঁটাই করতে পারেন:
$post_ids = array_keys( $children );
$q = new WP_Query( array( 'post__in' => $post_ids );
// etc
এই কৌশলটি ব্যবহার করে আপনি অন্য কোনও মেট্রিকের সাথে মেটা কী মান প্রতিস্থাপন করতে পারেন, বা অন্য উপায়ে পুনরাবৃত্ত ফাংশন ব্যবহার করতে পারেন।
যেহেতু পুরো কোডটিতে কেবল কয়েক সেকেন্ডের বোধগম্যতা এবং একটি দ্রুত অনুলিপি পেস্ট প্রয়োজন, তাই আমি কোডের সম্পূর্ণ অনুলিপি পেস্ট ব্লক দিয়ে আপনার বুদ্ধিমত্তাকে অপমান করব না।
সুবিধাদি
- পরিবর্তন সহ যে কোনও পোস্ট ধরণের এবং ডেটা ফর্মের জন্য কাজ করে
- নেস্টেড মার্কআপ জেনারেট করে সংশোধন করা যায়
- ফিরে আসা অ্যারেগুলি স্থানান্তরে রেখে সহজেই ক্যাশে করুন
- শেষ WP_Query এ পেজিং প্রয়োগ করে পেজিংয়ের সাথে সেটআপ করা যেতে পারে
সমস্যাগুলি আপনার মোকাবেলা করবে
- আপনি যতক্ষণ না পেলেন সেখানে কতগুলি শিশু রয়েছে তা জানার কোনও উপায় আপনার নেই, সুতরাং পারফরম্যান্সের ব্যয় মাপেনি
- আপনি যা চান তা প্রচুর প্রশ্ন উত্পন্ন করবে এবং এতে জড়িত সম্ভাব্য গভীরতার কারণে স্বভাবগতভাবে ব্যয়বহুল।
আমার সুপারিশ
আমি আপনাকে সুপারিশ করব যাতে হয় আপনার পৃষ্ঠার শ্রেণিবিন্যাস সমতল করুন বা পরিবর্তে একটি শৈলী ব্যবহার করুন। উদাহরণস্বরূপ, আপনি যদি পোস্টগুলি রেটিং করেন তবে 1,2,3,4 এবং 5 পদগুলির সাথে একটি পৃষ্ঠা রেটিং শ্রেণীবদ্ধ করুন This এটি আপনাকে বাক্সের বাইরে পোস্টের তালিকা সরবরাহ করবে।
বিকল্পভাবে, নেভ মেনুগুলি ব্যবহার করুন এবং এই সমস্যাটিকে পুরোপুরি বাইপাস করুন