2012-09-07 14 views
5

अद्यतन:आदेश Wordpress पदों माता पिता श्रेणी के आधार पर

<?php if (is_category(events)) { 
$posts = query_posts($query_string . '&orderby=event_date&order=desc'); 
} else { 
    $posts = query_posts($query_string . '&orderby=title&order=asc'); 
    } 
?> 

वहाँ किसी भी कारण है कि कि wouldnt काम है: मैं निम्नलिखित कोड का उपयोग कर की कोशिश की? ऐसा लगता है कि वर्णमाला क्रम में ठीक संगठित पदों पर काम करना प्रतीत होता है, लेकिन अभी भी 'घटनाओं' के भीतर दिनांक आदेश पर कोई भाग्य नहीं है।

-

विभिन्न मौजूदा प्रश्नों के माध्यम से खोज के बाद मैंने काफी मैं क्या कर कोशिश कर रहा हूँ का समाधान खोजने के लिए नहीं कर सकते हैं।

वर्तमान में मेरी साइट पर सभी पोस्ट्स को क्रमबद्ध रूप से क्रमबद्ध किया गया है, जो कि मैंने जोड़ा है एक नई श्रेणी को छोड़कर ठीक है। इस श्रेणी के लिए मैं सभी पदों को उस मान से ऑर्डर करना चाहता हूं जिसे मैं कस्टम फ़ील्ड में दर्ज करता हूं। फ़ील्ड को 'event_date' कहा जाता है - इसलिए मैं अनिवार्य रूप से पदों को क्रमशः आदेश देना चाहता हूं, लेकिन पोस्ट की तारीख की तारीख नहीं, जिस तारीख उपयोगकर्ता मैन्युअल रूप से इस क्षेत्र में प्रवेश करता है।

मैं इसे का उपयोग करके काम कर पाने में कामयाब रहे:

<?php if (is_category($events)) { $posts = query_posts($query_string . '&orderby=$event_date&order=asc'); } ?> 

हालांकि यह अन्य सभी पृष्ठों के लिए aphabetical आदेश ओवरराइड करता है।

वर्णमाला के क्रम के लिए मैं उपयोग कर रहा हूँ:

<?php if (is_category()) { $posts = query_posts($query_string . '&orderby=title&order=asc'); } ?> 

अनिवार्य रूप से मैं एक बयान है कि aphabetical क्रम में सभी पोस्ट ऑर्डर करने के लिए पेज बताता चाहते हैं, जब तक कि वर्ग 'घटनाओं' है, जहां मैं से उन्हें ऑर्डर करना चाहते हैं कस्टम घटना की तारीख।

जैसा कि आप शायद बता सकते हैं कि मैं बहुत अधिक अंतराल हूं, पीछे नहीं हूं इसलिए इसमें से बहुत कुछ मेरे लिए बिल्कुल नया है, इसलिए किसी भी मदद या सलाह की सराहना की जाती है।

उत्तर

0

उम्मीद है कि मैं अपने प्रश्न समझ में आया, WP_Query का उपयोग करें और orderby भीतर स्तंभों के आधार पर अपने आदेश के बीच एक रिक्ति जोड़ें:

$args = array(
    'posts_per_page' => 100, 
    'orderby' => 'title', 
    'order' => 'ASC', 
); 

if(is_category($events)){ 
    $args['orderby'] .= " meta_value_num"; 
    $args['meta_key'] = 'event_date'; 
} 

$posts = (array) new WP_Query($args); 
+0

क्या मुझे घटनाओं श्रेणी को अन्य श्रेणियों के लिए अलग-अलग प्रदर्शित करने के लिए ईवेंट श्रेणी को बताने के लिए कहीं भी एक कथन का उपयोग करने की आवश्यकता नहीं होगी? –

+0

हां आप करेंगे। उत्तर –

+0

अपडेट करना इसके साथ आपकी सहायता की बहुत सराहना करता है, हालांकि मुझे अभी भी WP-Query का उपयोग करके कोई भाग्य नहीं है। क्या कोई कारण है कि निम्नलिखित सही काम करेंगे? यह वर्णमाला क्रम में सभी cateogies प्रदर्शित करता है, लेकिन तारीख के क्रम में घटनाओं नहीं?

0

के बारे में क्या:

<?php $posts = query_posts($query_string . (is_category($events)?'&orderby='.$event_date:'&orderby=title') . '&order=asc'); ?> 
+0

मैंने इसका उपयोग करने की कोशिश की लेकिन फिर न तो उन्हें प्रदर्शित करना चाहिए। यद्यपि जवाब की सराहना करते हैं। –

0
<?php 
$recent = new WP_Query(“cat=ID&showposts=x”); 
while($recent->have_posts()) : $recent->the_post(); 
?> 
1

द्वारा पदों के आदेश करने के लिए एक कस्टम फ़ील्ड मान, आपको क्वेरी में कस्टम मेटा फ़ील्ड जोड़ने की आवश्यकता है। orderby=meta_valuemeta_key=metafieldid के अलावा इस फैशन में ऑर्डर करने की अनुमति देगा।

मैं pre_get_posts hook का उपयोग करूंगा और get_query_var("cat") (या एक समान क्वेरी var) वांछित पोस्ट श्रेणी देता हूं तो क्वेरी ऑब्जेक्ट को संशोधित करेगा।

add_action("pre_get_posts", "custom_event_post_order"); 

function custom_event_post_order($query) 
{ 
    $queried_category = $query -> get_query_var("cat"); 

    /* 
    * If the query in question is the template's main query and 
    * the category ID matches. You can remove the "is_main_query()" 
    * check if you need to have every single query overridden on 
    * a page (e.g. secondary queries, internal queries, etc.). 
    */ 
    if ($query -> is_main_query() && $queried_category == 123) 
    { 
     $query -> set("meta_key", "event_date"); // Your custom field ID. 
     $query -> set("orderby", "meta_value"); // Or "meta_value_num". 
     $query -> set("order", "ASC"); // Or "DESC". 
    } 
} 

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

आपको कस्टम फ़ील्ड डेटा को डेटाबेस में सहेजने के तरीके को मानकीकृत करना चाहिए। तिथियों के लिए मैं यूनिक्स-टाइमस्टैम्प स्वरूपित समय का उपयोग करना पसंद करता हूं जो चारों ओर घूमना और कुशलतापूर्वक उपयोग करना आसान है। इस तरह कोई दुर्घटनाएं तब होती हैं जब पूछताछ होती है और कुछ डेटा दूसरे तरीके से प्रारूपित होता है।

अस्वीकरण: मैं समय कार्रवाई में ऊपर कोड का परीक्षण करने के लिए है नहीं था, लेकिन सामान्य विचार ठीक तरह से काम करना चाहिए।

संपादित करें: जाहिर है इसके बाद के संस्करण कोड functions.php या इसी तरह की सामान्य कार्यों फाइल करने के लिए डाला जाना चाहिए।

+0

बहुत अच्छा और साफ समाधान! – Philipp

संबंधित मुद्दे