मेरा लक्ष्य पोस्ट को उनके नाम से ऑर्डर करना है जो ($category[0]->cat_name) के रूप में संग्रहीत है और तिथि के अनुसार नहीं। मैं समझता हूं कि डिफ़ॉल्ट रूप से wp_query उन्हें तिथि के अनुसार आदेश देता है, इसलिए उन्हें वर्तमान में यहां बताए गए दिनांक के अनुसार आदेश दिया जाता है: ऑर्डर पैरामीटर

मेरा कोड इस प्रकार है:

$args = array(
            'post_type' => 'pastpapers', 
            'posts_per_page' => 20000, 
            // the value of orderby doesn't change anything
            'orderby' => 'date',
            // the value of order doesn't change anything
            'order'   => 'DESC',
            'post_status' => 'publish',
            'tax_query' => array(
                 array(
                     'taxonomy' => 'category',
                     'field' => 'term_id',
                     'terms'    => $category->term_id
                 ),
            ),
        );

मुझे नहीं लगता कि समस्या मेरे लूप के साथ है लेकिन यहां कोड वैसे भी है:

$dataQuery = new WP_Query($args);
        if ($dataQuery->have_posts()) : 
            while ($dataQuery->have_posts()) : $dataQuery->the_post();
        
                $category = get_the_category($post->ID);
                
                echo '<strong class="d-block text-secondary2 text-uppercase">'. $category[0]->cat_name .'</strong>';

            endwhile; 
        endif; 
        

        // Restore original Post Data
        wp_reset_postdata();

    } // End foreach
    ?>

मैंने ऑर्डरबी और ऑर्डर के मूल्यों को बदलने और उन्हें पूरी तरह से हटाने की कोशिश की है, लेकिन वेबसाइट पर पोस्ट का क्रम नहीं बदलता है। मुझे लगता है कि ऐसा इसलिए है क्योंकि यह डिफ़ॉल्ट ऑर्डर का उपयोग कर रहा है, न कि ऑर्डरबी और ऑर्डर के तर्कों में जो भी मूल्य मैंने रखा है। हालांकि मुझे नहीं पता कि यह डिफ़ॉल्ट मानों का उपयोग क्यों कर रहा है, न कि मेरे कस्टम वाले।

मैंने इसी तरह के प्रश्न को पढ़ा है: orderby not working

लेकिन अभी भी नहीं पता कि मेरी समस्या को कैसे हल किया जाए। मैंने स्टैक ओवरफ़्लो पर एक समान प्रश्न भी पढ़ा, जहां यह क्वेरी को अधिलेखित करने वाले प्लगइन के साथ एक समस्या प्रतीत होती थी, लेकिन मुझे नहीं लगता कि यह मामला है क्योंकि मैं उस प्लगइन का उपयोग नहीं कर रहा हूं।

किसी भी तरह की सहायता का स्वागत किया जाएगा।

0
The Observer 12 सितंबर 2020, 00:51

1 उत्तर

सबसे बढ़िया उत्तर

मुझे एक समाधान मिला जो थोड़ा अधिक जटिल हो सकता है लेकिन कम से कम यह मेरी समस्या का समाधान करता है।

तो मैं WP_query को शीर्षक से ऑर्डर करने का प्रयास कर रहा था और यह मेरी पोस्ट को डिफ़ॉल्ट मान से ऑर्डर कर रहा था जो कि दिनांक है और जो मैं चाहता था।

तो इसके बजाय मुझे मेरी क्वेरी से मेल खाने वाली सभी पोस्ट मिल गईं, उन्हें निम्नानुसार एक सरणी में डाल दें:

$index = 0;
        
        $dataQuery = new WP_Query($args);
        if ($dataQuery->have_posts()) :
            while ($dataQuery->have_posts()) : $dataQuery->the_post();
                $category = get_the_category($post->ID);
                
                $tempLink = get_permalink();
                $tempDate = date('Y', strtotime($post->post_date));
                $tempTitle = get_the_title();
                $tempName = $category[0]->cat_name;
        
                $testArray2 = array(
                    'link' => $tempLink,
                    'date' => $tempDate,
                    'title' => $tempTitle,
                    'name' => $tempName
                );
                
                $testArray[$index++] = $testArray2;
                
            
            endwhile;
        endif;
        wp_reset_postdata();

एक बार जब मेरे पास वे सभी पद थे जो मैं अपनी सरणी में चाहता था जैसा कि मैं उन्हें चाहता था, तो मैं उन्हें क्रम में क्रमबद्ध करने के लिए आगे बढ़ा, जो कि मैं उन्हें चाहता था जो कि जटिल था क्योंकि मैंने कुछ शीर्षक 1 और 20 के बीच की संख्या के साथ शुरू किए थे और अन्य पदों में सिर्फ शीर्षक नहीं थे संख्याएं। सबसे पहले मैंने केवल strcmp() फ़ंक्शन का उपयोग किया था, लेकिन यह काम नहीं किया क्योंकि संख्याएं अक्षरों से पहले होंगी और मैं चाहता था कि वे अक्षरों के बाद हों जैसे: बीजगणित, कार्य, 4. विभेदन, 10. गुणनखंडन

और इस तरह क्रमबद्ध नहीं: 4. विभेदन, 10. गुणनखंड, बीजगणित, कार्य

तो ऐसा करने के लिए मुझे पहले शीर्षक में कोई भी संख्या प्राप्त करनी थी यदि कोई ऐसा था जिसके लिए मैंने preg_match_all() फ़ंक्शन का उपयोग किया था और फिर सरणी को एक चर में बदलने के लिए मैंने इम्पोड का उपयोग किया था () फ़ंक्शन

मैंने तब जाँच की कि क्या 0 के बराबर नहीं थे, जिसका अर्थ यह होगा कि यह स्ट्रिंग में एक संख्या है, न कि केवल एक संख्या के बिना एक स्ट्रिंग।

मैंने उन्हें i+1 से तुलना करके एक बार में केवल एक की जाँच करके उन्हें सॉर्ट किया। मुझे पता है कि इसे सॉर्ट करने का यह सबसे कारगर तरीका नहीं है लेकिन यह काम करता है।

मैंने एक वेरिएबल $sorts बनाया और इसे ऐरे के आकार पर सेट किया और यह सुनिश्चित करने के लिए हर बार इसे घटाया कि पूरी ऐरे को सॉर्ट किया गया था। महान कोडिंग नहीं है लेकिन यह काम करता है।

ऐसा करने के लिए कोड यहां दिया गया है:

$sorts = sizeof($testArray);
        while($sorts > 0) {
            for($i = 0; $i + 1 < sizeof($testArray); $i++) {
                preg_match_all('!\d+!', $testArray[$i]['name'], $matches);
                preg_match_all('!\d+!', $testArray[$i+1]['name'], $matches2);
                $var1 = implode(' ', $matches[0]);
                $var2 = implode(' ', $matches2[0]);

                if($var1 != 0 && $var2 != 0) {
                    if($var1 > $var2) {
                        $temp = $testArray[$i];
                        $testArray[$i] = $testArray[$i+1];
                        $testArray[$i+1] = $temp;
                    }
                }
                else if(($var1 != 0 && $var2 == 0)) {
                    $temp = $testArray[$i];
                    $testArray[$i] = $testArray[$i+1];
                    $testArray[$i+1] = $temp;
                }
                else if(($var1 == 0 && $var2 != 0)) {
                    //do nothing
                }
                else if(strcmp($testArray[$i]['name'], $testArray[$i+1]['name']) > 0) {
                    $temp = $testArray[$i];
                    $testArray[$i] = $testArray[$i+1];
                    $testArray[$i+1] = $temp;
                }
            }
            $sorts--;
        }

एक बार जब मेरे पास सॉर्ट किए गए पोस्ट थे जैसे मैं उन्हें चाहता था तो मुझे बस इतना करना था कि मैं लूप के लिए एक आसान था और पोस्ट को प्रतिबिंबित करता था जैसे मैं चाहता था:

for($i = 0; $i < sizeof($testArray); $i++) {
  //echo code
}

और वहां हम जाते हैं जो काम करता है।

0
Liam Bartsch 14 सितंबर 2020, 09:04