ইন্টার্নাল বোঝা
সংলগ্ন (পরবর্তী / পূর্ববর্তী) পোস্টগুলির "সাজানোর" ক্রমটি আসলে "ক্রম" নয়। এটি প্রতিটি অনুরোধ / পৃষ্ঠায় একটি পৃথক ক্যোয়ারী, তবে এটি আপনার post_date
- বা পোস্ট প্যারেন্টের দ্বারা ক্যোয়ারীটি সাজায় যদি আপনার বর্তমানে প্রদর্শিত অবজেক্ট হিসাবে শ্রেণিবদ্ধ পোস্ট থাকে।
যখন তোমাদের অভ্যন্তরীণ কটাক্ষপাত করা next_post_link()
, তাহলে আপনি দেখতে যে এটি মূলত জন্য একটি API মোড়কের এর adjacent_post_link()
। পরবর্তী ফাংশনটি পরবর্তী বা পূর্ববর্তী পোস্টের লিঙ্কটি দখল করতে আর্গুমেন্ট / ফ্ল্যাগ সেট get_adjacent_post()
করে অভ্যন্তরীণভাবে কল করে ।$previous
bool(true|false)
ফিল্টার কি?
এটি আরও গভীরভাবে খনন করার পরে, আপনি দেখতে পাবেন যে get_adjacent_post()
উত্স লিঙ্কটির আউটপুটটির জন্য কয়েকটি দুর্দান্ত ফিল্টার রয়েছে (ওরফে ক্যোয়ারী ফলাফল): (ফিল্টার নাম / যুক্তি)
"get_{$adjacent}_post_join"
$join
// Only if `$in_same_cat`
// or: ! empty( $excluded_categories`
// and then:
// " INNER JOIN $wpdb->term_relationships AS tr
// ON p.ID = tr.object_id
// INNER JOIN $wpdb->term_taxonomy tt
// ON tr.term_taxonomy_id = tt.term_taxonomy_id";
// and if $in_same_cat then it APPENDS:
// " AND tt.taxonomy = 'category'
// AND tt.term_id IN (" . implode(',', $cat_array) . ")";
$in_same_cat
$excluded_categories
"get_{$adjacent}_post_where"
$wpdb->prepare(
// $op = $previous ? '<' : '>'; | $current_post_date
"WHERE p.post_date $op %s "
// $post->post_type
."AND p.post_type = %s "
// $posts_in_ex_cats_sql = " AND tt.taxonomy = 'category'
// AND tt.term_id NOT IN (" . implode($excluded_categories, ',') . ')';
// OR empty string if $in_same_cat || ! empty( $excluded_categories
."AND p.post_status = 'publish' $posts_in_ex_cats_sql "
",
$current_post_date,
$post->post_type
)
$in_same_cat
$excluded_categories
"get_{$adjacent}_post_sort"
"ORDER BY p.post_date $order LIMIT 1"`
সুতরাং আপনি এটি দিয়ে অনেক করতে পারেন । এটি WHERE
ক্লজ ফিল্টার করার পাশাপাশি JOIN
এড টেবিল এবং ORDER BY
বিবৃতি দিয়ে শুরু হয়।
ফলাফলটি বর্তমান অনুরোধটির জন্য মেমোরিতে ক্যাশে হয়ে যায়, তাই আপনি যদি কোনও একক পৃষ্ঠায় একাধিকবার ফোন করে ফাংশনটি কল করেন তবে এটি অতিরিক্ত অনুসন্ধান যুক্ত করে না।
স্বয়ংক্রিয় ক্যোয়ারী বিল্ডিং
@ স্টেফেনহারিস মন্তব্যগুলিতে যেমন উল্লেখ করেছেন, এসকিউএল ক্যোয়ারী তৈরির সময় একটি মূল ফাংশন কার্যকর হতে পারে: get_meta_sql()
- কোডেক্সে উদাহরণ । মূলত এই ফাংশনটি কেবল ব্যবহৃত মেটা এসকিউএল স্টেটমেন্টটি তৈরি করতে ব্যবহৃত হয় WP_Query
তবে আপনি এটি এ ক্ষেত্রে (বা অন্যরাও) এটি ব্যবহার করতে পারেন। আপনি যে আর্গুমেন্টটি এতে ফেলেছেন তা হ'ল একটি অ্যারে, হুবহু একই যা যুক্ত করবে WP_Query
।
$meta_sql = get_meta_sql(
$meta_query,
'post',
$wpdb->posts,
'ID'
);
ফেরতের মানটি একটি অ্যারে:
$sql => (array) 'join' => array(),
(array) 'where' => array()
সুতরাং আপনি $sql['join']
এবং $sql['where']
আপনার কলব্যাক ব্যবহার করতে পারেন ।
নির্ভরতা মাথায় রাখতে হবে
আপনার ক্ষেত্রে সবচেয়ে সহজ বিষয় হ'ল এটি একটি ছোট (মিউ) প্লাগইনে বা আপনার থিম ফাংশন.এফপি ফাইলের মধ্যে বাধা এবং পরিবর্তনশীল $adjacent = $previous ? 'previous' : 'next';
এবং ভেরিয়েবলের উপর নির্ভর করে এটিকে $order = $previous ? 'DESC' : 'ASC';
পরিবর্তন করা:
প্রকৃত ফিল্টার নাম
সুতরাং ফিল্টার নামগুলি হল:
get_previous_post_join
, get_next_post_join
get_previous_post_where
, get_next_post_where
get_previous_post_sort
, get_next_post_sort
একটি প্লাগইন হিসাবে আবৃত
... এবং ফিল্টার কলব্যাক (উদাহরণস্বরূপ) নিম্নলিখিতগুলির মতো কিছু হবে:
<?php
/** Plugin Name: (#73190) Alter adjacent post link sort order */
function wpse73190_adjacent_post_sort( $orderby )
{
return "ORDER BY p.menu_order DESC LIMIT 1";
}
add_filter( 'get_previous_post_sort', 'wpse73190_adjacent_post_sort' );
add_filter( 'get_next_post_sort', 'wpse73190_adjacent_post_sort' );