कस्टम लूप / क्वेरी कस्टम फ़ील्ड के आधार पर - सीएसएस-ट्रिक्स

Anonim
अंतिम बार जेसन विट द्वारा अपडेट किया गया।

यदि आप वर्डप्रेस थीम या प्लगइन्स डिज़ाइन या विकसित करते हैं, तो एक अच्छा मौका है कि किसी दिन आपको कस्टम मेटा फ़ील्ड के लिए एक क्वेरी बनाने की आवश्यकता होगी। ये पूरी तरह से कस्टम कुंजी / मूल्य जोड़े हैं जिन्हें आप किसी भी पोस्ट, पेज या कस्टम पोस्ट प्रकार से संलग्न कर सकते हैं। वर्डप्रेस में डिफ़ॉल्ट रूप से उनके लिए एक बुनियादी यूआई है, या आप उनके साथ फैंसी पाने के लिए उन्नत कस्टम फ़ील्ड जैसी कुछ का उपयोग कर सकते हैं। लेकिन हुड के तहत ACF नियमित ol 'कस्टम फ़ील्ड का उपयोग करता है।

यह बहुत छोटा स्निपेट पृष्ठ जिसे आप अभी देख रहे हैं, वह 1999 में लिखा गया था। उस समय, विशेष कस्टम फ़ील्ड्स के साथ पोस्ट करने के लिए क्वेरी करने के लिए, आपको `$ wpdb` ग्लोबल वैरिएबल का उपयोग करना होगा। इसका उपयोग MySQL क्वेरी बनाने के लिए किया जा सकता है जो वर्डप्रेस WP_Query () वर्ग का समर्थन नहीं करता है। सौभाग्य से, आज वर्डप्रेस के पास तर्क हैं जो कस्टम मेटा फ़ील्ड के लिए प्रश्नों का समर्थन करते हैं।

यहां, हम उन विभिन्न तरीकों को शामिल करेंगे जिन्हें आप अनुरोध कर सकते हैं और विशेष कस्टम फ़ील्ड (और उनके मूल्यों) के साथ पोस्ट पर लूप कर सकते हैं। आप इस जानकारी का उपयोग करने में सक्षम होंगे कि क्या आप WP_Queryकक्षा का उपयोग करते हैं query_posts(), या get_posts()। चूंकि query_posts()और वर्ग के get_posts()लिए रैपर हैं WP_Query। वे सभी एक ही तर्क को स्वीकार करते हैं।

क्वेरी तर्क

यहां वर्डप्रेस कोडेक्स से ली गई वर्डप्रेस क्वेरी का मूल उदाहरण दिया गया है।

have_posts() ) ( echo '
    '; while ( $the_query->have_posts() ) ( $the_query->the_post(); echo '
  • ' . get_the_title() . '
  • '; ) echo '
'; ) else ( // no posts found ) /* Restore original Post Data */ wp_reset_postdata();

$argsमहत्वपूर्ण बिट है। हम इस कार्य को करने के लिए अलग-अलग तर्क दे रहे हैं कि हम कैसे चाहते हैं।

कस्टम मेटा के लिए क्वेरी करते समय, दो "समूह" तर्क होते हैं जिनका आप उपयोग कर सकते हैं। एक समूह एक साधारण कस्टम मेटा फ़ील्ड क्वेरी के लिए और दूसरा समूह अधिक जटिल कस्टम मेटा फ़ील्ड क्वेरी के लिए है। सरल समूह से शुरू करते हैं।

मेटा_की

meta_keyतर्क किसी भी पोस्ट कस्टम फ़ील्ड मेटा डेटाबेस को बचाया आईडी है, या नहीं, क्षेत्र के लिए सहेज कर एक मूल्य नहीं होता है क्वेरी करेगा। meta_keyआईडी है कि आप अपने मेटा क्षेत्रों के लिए दे रहा है। इस कदर:

यह उदाहरण किसी भी पोस्ट को क्वेरी करेगा जिसमें "फ़ील्ड 1" की आईडी के साथ कस्टम मेटा फ़ील्ड है।

$args = array( 'meta_key' => 'field1' );

meta_value

meta_valueतर्क के बाद मूल्य आपके द्वारा निर्धारित है कि प्रश्नों। meta_valueतर्क स्ट्रिंग मूल्यों के लिए प्रयोग किया जाता है। यह उदाहरण किसी भी पोस्ट को कस्टम मेटा फ़ील्ड के साथ क्वेरी करेगा जिसका मूल्य "data1" है।

$args = array( 'meta_value' => 'data1' );

आप दोनों को मिला भी सकते हैं। यह उदाहरण केवल उन पोस्ट को क्वेरी करेगा जिनके पास "फ़ील्ड 1" की आईडी के साथ कस्टम मेटा फ़ील्ड है जिसमें "data1" का मान है।

$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1' );

meta_value_num

Meta_value_num तर्क `meta_value` तर्क के समान है। जहां meta_valueतर्क स्ट्रिंग मानों के meta_value_numलिए मानसिक है, संख्यात्मक मान के लिए है।

यह उदाहरण दिखाता है कि "फ़ील्ड 1" कस्टम मेटा फ़ील्ड को क्वेरी कैसे करें यदि इसका मान "10" है।

$args = array( 'meta_key' => 'field1', 'meta_value_num' => '10', );

meta_compare

meta_compareतर्क यह कैसा लग रहा है वास्तव में करता है। यह आपको 'meta_value' और `meta_value_num 'तर्कों के साथ तुलना का उपयोग करने की अनुमति देगा। तुलना करने वाले आप '=', '=', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN' का उपयोग कर सकते हैं , 'BETWEEN', 'NOT BETWEEN', 'NOT EXISTS', 'REGEXP', 'NOT REGEXP' या 'RLIKE'। यहां एक उदाहरण है जो दिखाता है कि किसी भी पोस्ट को कैसे क्वेरी करना है जिसमें "data1" का मूल्य नहीं है।

$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1', 'meta_compare' => '!=', );

अधिक जटिल प्रश्न

meta_query

जटिल प्रश्नों के लिए आपके द्वारा उपयोग किया जाने वाला मुख्य तर्क है meta_query। इस पर यह तर्क कुछ भी नहीं करता है। यह सिर्फ वर्डप्रेस बताता है कि आप कस्टम मेटा फ़ील्ड के लिए एक क्वेरी बनाना चाहते हैं। आप अतिरिक्त तर्क जोड़ेंगे meta_queryजो क्वेरी को परिभाषित करने के लिए उपयोग किया जाएगा।

कुंजी, मूल्य और तुलना

तर्क key, valueठीक उसी तरह काम करते हैं meta-key, meta-valueजैसा कि ऊपर वर्णित है। जटिल ऊपर compareके सरल के समान है compare, लेकिन यह तुलना करने वालों की एक अलग सूची लेता है। कॉम्प्लेक्स में compare'=', '=', '>', '>', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN' का उपयोग किया जाता है ',' NOT BETWEEN ',' EXISTS ', या' NOT EXISTS '। valueएक सरणी हो सकता है, लेकिन केवल जब तुलना 'IN', 'NOT IN', 'BETWEEN', या 'NOT BETWEEN' का उपयोग कर रहा हो।

यदि आप 'EXISTS', या 'NOT EXISTS' का उपयोग करते हैं compare, तो आपको एक valueतर्क निर्दिष्ट करने की आवश्यकता नहीं है।

यहां एक उदाहरण है जो पदों को क्वेरी करेगा यदि इसमें "data1" मान के साथ "फ़ील्ड 1" है, और "फ़ील्ड 2" उस मान के साथ है जो "डेटा 2" नहीं है।

$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1' ), array( 'key' => 'field2', 'value' => 'data2', 'compare' => '!=', ) ) );

रिश्ता

relationप्रयोग किया जाता है जब आप एक तार्किक संबंध का उपयोग कर क्वेरी कस्टम मेटा डेटा करना चाहते हैं। आप उपयोग कर सकते हैं ANDया OR। उदाहरण के लिए आप ANDतुलना करने के लिए उपयोग करेंगे यदि data1 और data2 मापदंड को पूरा करते हैं, और ORयदि data1 या data2 मानदंड को पूरा करते हैं तो आप उपयोग करते हैं।

यह तर्क स्टैंड-अलोन है। इसका मतलब यह है कि यह एक व्यक्तिगत कस्टम मेटा फ़ील्ड मापदंडों में प्रकट नहीं होता है। आइए एक उदाहरण देखें। यह उदाहरण केवल "डेटा 1" के मूल्य के साथ "फ़ील्ड 1", और "डेटा 2" के मूल्य के साथ "फ़ील्ड 2" वाले क्वेरी का उदाहरण देगा।

$args = array( 'meta_query' => array( 'relation' => 'AND' array( 'key' => 'field1', 'value' => 'data1', ), array( 'key' => 'field2', 'value' => 'data2', ), ) );

यदि आप relation"ओर" में बदल गए हैं। यदि "फ़ील्ड 1" में "data1" का मान है, या यदि "फ़ील्ड 2" में "data2" का मान है, तो यह किसी भी पोस्ट को क्वेरी करेगा।

प्रकार

typeतर्क आप क्वेरी के लिए डेटा के प्रकार का चयन करने के लिए अनुमति देता है। आप 'NUMERIC', 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME', या 'UNSIGNED' का उपयोग कर सकते हैं।

“DATE” प्रकार का उपयोग compare“BETWEEN” के साथ तभी किया जा सकता है जब दिनांक प्रारूप “YYYYMMDD” हो।

यह उदाहरण किसी भी पद को क्वेरी करेगा जहां "फ़ील्ड 1" का मूल्य संख्यात्मक है।

$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1', 'type' => 'NUMERIC' ) ) );

वास्तविक विश्व उदाहरण

अब तक, मैंने केवल मनमाने डेटा और फ़ील्ड के साथ उदाहरण दिए हैं। अब, मैं आपको कस्टम मेटा फ़ील्ड को क्वेरी करने का एक वास्तविक विश्व उदाहरण दिखाना चाहूंगा।

परिदृश्य

आपने एक ईवेंट कस्टम पोस्ट प्रकार बनाया है। इवेंट पोस्ट प्रकार में ID के साथ दिनांक कस्टम फ़ील्ड है event_date। आप एक क्वेरी बनाना चाहते हैं जो अगले 30 दिनों के माध्यम से वर्तमान तिथि पर शुरू होने वाली घटनाओं को दिखाएगी।

हम meta_queryतर्क का उपयोग करने जा रहे हैं क्योंकि हम type"Event_date" फ़ील्ड को "DATE" डेटा प्रकार के रूप में परिभाषित करने के लिए तर्क का उपयोग करना चाहते हैं ।

यह प्रश्न है:

$args = array( 'post_type' => 'post', 'posts_per_page' => -1, 'post_status' => 'publish', 'meta_query' => array( array( 'key' => 'event_date', 'value' => array( date( 'Ymd', strtotime( '-1 day' ) ), date( 'Ymd', strtotime( '+31 days' ) ) ), 'compare' => 'BETWEEN', 'type' => 'DATE' ) ) ); $event_query = new WP_Query( $args );

valueआज की तारीख की एक सरणी है - 1 दिन और आज की तारीख से 31 दिन। चूँकि हम तुलनित्र "BETWEEN" का उपयोग कर रहे हैं, केवल मान सरणी के बीच के पदों को समझा जाएगा, इसलिए हम उन्हें एक दिन के लिए ऑफसेट करना चाहते हैं।

इस क्वेरी के साथ आप अगले 30 दिनों में होने वाली किसी भी घटना को प्रदर्शित करेंगे।

निष्कर्ष

WP_Queryवर्ग एक बहुत लचीला वर्ग है कि आप के लिए कस्टम क्वेरी की एक भीड़ बनाने के लिए अनुमति देगा। यदि आप उन विभिन्न तर्कों के बारे में अधिक जानना चाहते हैं जो आप उन प्रश्नों के लिए उपयोग कर सकते हैं जो मैं WP_Queryकोड पृष्ठ के माध्यम से देखने की सलाह देता हूं ।