मेटा_क्वेरी का उपयोग करते हुए, मैं कस्टम फ़ील्ड द्वारा फ़िल्टर कैसे कर सकता हूं और किसी अन्य द्वारा ऑर्डर कर सकता हूं?


10

निम्नलिखित कोड के साथ (functions.php में) मेरे पोस्ट (CPT ईवेंट के) _start_date के बजाय _end_date द्वारा ऑर्डर किए गए हैं। WP 3.1.3 के अनुसार इसका उचित समाधान क्या है? बेशक मैं पदावनत होने से बचना चाहूंगा 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

यह Wordpress में एक बग प्रतीत होता है। यदि आप ऑर्डरबी और मेटा_की को क्वेरी वर्जन के रूप में निर्दिष्ट करते हैं तो वर्डप्रेस वास्तव में मेटा_क्वेरी को संशोधित करता है। आम तौर पर यह संशोधन मेटाटक्वायरी सरणी में पहले सरणी के रूप में नया मेटा_की जोड़ता है और इसलिए यह मेटा मेटा में निर्दिष्ट पहली मेटा कुंजी पर लागू होता है।

लेकिन जब आप pre_get_posts फ़िल्टर में metby_key और meta_value query_vars को क्रमबद्ध रूप से संशोधित करते हैं, तो (यह मुझे लगता है) Wordpress में बग के कारण, यह मौजूदा मेटा क्वेरी में नया सरणी जोड़ देता है, लेकिन नया सरणी पहले सरणी के रूप में नहीं डाला जाता है, यह जुड़ जाता है। मौजूदा मेटा_क्वारी को। और ऑर्डरबी हमेशा मेटा_क्वरी में पहले मेटा_की पर लागू होता है।

जब तक बग ठीक नहीं हो जाता, तब तक आप निम्न उदाहरण में पहले सरणी के रूप में मेटा_क्वरी में फिर से मेटा_की निर्दिष्ट कर सकते हैं:

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;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.