মেটা_কিউরি ব্যবহার করে, আমি কীভাবে একটি কাস্টম ফিল্ড দিয়ে ফিল্টার করতে পারি এবং অন্য একটির দ্বারা অর্ডার করতে পারি?


10

নিম্নলিখিত কোডের সাথে (ফাংশন.এফপি) আমার পোস্টগুলি (সিপিটি ইভেন্টের) _ স্টার্ট_ডেটের পরিবর্তে _end_date দ্বারা অর্ডার করা হয়েছে। ডাব্লুপিপি ৩.১.৩ এর যথাযথ সমাধান কী? অবশ্যই আমি অবচয়হীন ব্যবহার এড়াতে চাই meta_key

add_filter( 'pre_get_posts', 'my_get_posts' );
function my_get_posts( $query ) {
if ( is_home() ) {
  $query->set( 'post_type', 'event' );
  $query->set( 'meta_key', '_start_date' );
  $query->set( 'orderby', 'meta_value_num' );
  $query->set( 'order', 'ASC' );
  $query->set( 'meta_query', array(
                                   array(
                                         'key' => '_end_date',
                                         'value' => time(),
                                         'compare' => '>=',
                                         'type' => 'numeric'
                                        )
                                   )
                              );
  }
  return $query;
}

উত্তর:


15

এটি ওয়ার্ডপ্রেসে একটি বাগ বলে মনে হচ্ছে। ওয়ার্ডপ্রেস আসলে মেটা_কিউরিটি পরিবর্তন করে যদি আপনি অর্ডারবাই এবং মেটা_কিকে কোয়েরি ওয়ার্স হিসাবে নির্দিষ্ট করেন specify সাধারণত এই পরিবর্তনটি মেটা_কিউরি অ্যারেতে প্রথম অ্যারে হিসাবে নতুন মেটা_কি যুক্ত করে এবং তাই অর্ডারবাই মেটা_কোয়ারিতে নির্দিষ্ট করা প্রথম মেটা কীতে প্রয়োগ করা হয়।

তবে আপনি যখন ওয়ার্ডপ্রেসে (এটি আমার কাছে মনে হয়) বাগের কারণে অর্ডারবাই, মেটা_কি এবং মেটা_মূল্য ক্যোয়ারি_ভারগুলি পরিবর্তন করে, এটি বিদ্যমান মেটা ক্যোয়ারিতে নতুন অ্যারে যুক্ত করে তবে নতুন অ্যারেটিকে প্রথম অ্যারে হিসাবে সন্নিবেশ করা হয় না, এটি যুক্ত হয়ে যায় বিদ্যমান মেটা_কিউয়ের কাছে। এবং অর্ডারবাই সর্বদা মেটা_কিউরিতে প্রথম মেটা_কি-তে প্রয়োগ হয়।

সুতরাং বাগটি ঠিক না হওয়া অবধি কর্মক্ষেত্র হিসাবে আপনি মেটা_কিটিকে আবার প্রথম অ্যারের হিসাবে মেটা_কিয়ারে নির্দিষ্ট করতে পারবেন, যেমন নীচের উদাহরণ হিসাবে:

add_filter( 'pre_get_posts', 'my_get_posts' );
function my_get_posts( $query ) {
if ( is_home() ) {
  $query->set( 'post_type', 'event' );
  $query->set( 'meta_key', '_start_date' );
  $query->set( 'orderby', 'meta_value_num' );
  $query->set( 'order', 'ASC' );
  $query->set( 'meta_query', array(
        array(
              'key' => '_start_date'
        ),
        array(
              'key' => '_end_date',
              'value' => time(),
              'compare' => '>=',
              'type' => 'numeric'
        )
  ));
  }
  return $query;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.