क्या यादृच्छिक रूप से आदेश दिए गए पदों को सही ढंग से पृष्ठांकित करना संभव है?


30

मुझे Wordpress सपोर्ट पर यह समस्या मिली और दुर्भाग्य से यह विषय अब बंद हो गया है। मेरे पास यही मुद्दा है ... (नीचे पढ़ें)


हमने एक साइट बनाई है जहां सदस्य पसंदीदा पुस्तकों, मूवी, गाने आदि जैसी चीजों की सिफारिश कर सकते हैं। इस समस्या के लिए मैं एक उदाहरण के रूप में मूवीज पेज का उपयोग करूंगा।

"मूवीज़" पेज अंततः एक कस्टम पेज टेम्प्लेट है जो वर्डप्रेस को सभी पदों की एक यादृच्छिक सूची प्रदर्शित करने के लिए कहता है जिसे "मूवी" (श्रेणी 31) श्रेणी दी गई है। यह नीचे दिए गए कोड का उपयोग करके यादृच्छिक क्रम में इन फिल्मों का शीर्षक प्रदर्शित करता है।

<?php 
$rand = new WP_Query("cat=31&showposts=-1&orderby=rand"); 
while($rand->have_posts()) : $rand->the_post();
?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?>
<?php endwhile; ?>

समस्या यह है कि सूची लंबी हो रही है और मैं इसे लगभग 10 फिल्मों के दो या अधिक पृष्ठों में विभाजित करना चाहूंगा। इसे प्राप्त करने के लिए, मैंने नीचे दिए गए कोड का उपयोग किया है।

<?php 
$page = (get_query_var('paged')) ? get_query_var('paged') : 1; 
query_posts("cat=31&orderby=rand&showposts=10&paged=$page"); 
while ( have_posts() ) : the_post() 
?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?>
<?php endwhile; ?>

लेकिन एक समस्या है क्योंकि यद्यपि यह डेटा को 10 पदों के पेजों (प्रत्येक पृष्ठ) में विभाजित करता है, यह पेज 2 और इसके बाद के 10 पदों के एक नए सेट को शामिल करने में विफल रहता है। दूसरे शब्दों में, क्योंकि यह एक यादृच्छिक क्रम में चीजों को सूचीबद्ध कर रहा है, यह सिर्फ बाहर जाता है और एक और 10 यादृच्छिक पोस्ट (या इस मामले में फिल्म के शीर्षक) प्राप्त करता है। परिणामस्वरूप, हमारे पास पेज 2, आदि पर 10 यादृच्छिक मूवी शीर्षक के एक नए सेट के बजाय कुछ दोहराया मूवी शीर्षक पोस्ट हैं।

मेरा सवाल है - मैं इस कोड को "याद" करने के लिए वर्डप्रेस में क्या जोड़ सकता हूं, जो पेज 1 पर शामिल यादृच्छिक 10 पोस्ट करता है, और फिर इसे पेज 2, 3 आदि पर डालने के लिए 10 पोस्ट का एक नया सेट मिला है। सभी पोस्ट प्रदर्शित हैं। मैं चाहूंगा कि प्रति पृष्ठ एक पोस्ट की केवल एक घटना हो जब 10 के सेट में बेतरतीब ढंग से छंटनी हो।

जवाबों:


38

आप WP_query के कथन द्वारा ORDER BY को संशोधित करने के लिए फ़िल्टर का उपयोग कर सकते हैं।

इस तरह आप ORDER BY RAND ($ बीज) का उपयोग करने के लिए मैन्युअल रूप से क्वेरी सेट कर सकते हैं;

माईकल रैंड () एक बीज को एक वैकल्पिक तर्क के रूप में स्वीकार करता है। एक बीज का उपयोग करते हुए, यह हर बार निर्धारित एक ही यादृच्छिक परिणाम लौटाएगा।

तो आप पहले पृष्ठ लोड पर एक यादृच्छिक संख्या उत्पन्न कर सकते हैं, फिर इसे एक सेशन चर में संग्रहित कर सकते हैं और $ paginated अनुरोधों के लिए $ बीज के रूप में उपयोग कर सकते हैं।

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

session_start();

add_filter('posts_orderby', 'edit_posts_orderby');

function edit_posts_orderby($orderby_statement) {

    $seed = $_SESSION['seed'];
    if (empty($seed)) {
      $seed = rand();
      $_SESSION['seed'] = $seed;
    }

    $orderby_statement = 'RAND('.$seed.')';
    return $orderby_statement;
}

सही समाधान। बहुत बहुत धन्यवाद
फैज़ल रमज़ान

4

वर्डप्रेस के अंतिम संस्करण के बाद से, आप अब के मूल्य के एक बीज जोड़ सकते हैं orderbyके पैरामीटर WP_Query:

$query = new WP_Query([
    'orderby' => 'RAND($seed)',
    ...
]);

$seedएक यादृच्छिक संख्या है। आपको इसे PHP सत्र चर के रूप में संग्रहीत करना चाहिए। फोन करके वर्डप्रेस में पीएचपी सत्र सक्षम करने के लिए भूल गया नहीं है session_start()आप में functions.php:

if (!session_id()) {
    session_start();
}

इस सिंटैक्स के साथ आपको posts_orderbyफ़िल्टर का उपयोग करने की आवश्यकता नहीं है । इसके अलावा, आपको यह सुनिश्चित करने की ज़रूरत नहीं है कि फ़िल्टर केवल लक्षित WP_Query पर लागू हो।

अधिक जानकारी के लिए कृपया वर्डप्रेस कोर पर इस टिकट को पढ़ें ।


उत्तर तकनीकी रूप से सही हो सकता है, लेकिन यह बेकार है। कृपया लोगों को RTFM में भेजने के बजाय इसका कारण बताएं और समझाएं
मार्क कप्लून

मैंने अपने उत्तर को यह समझाने के लिए संपादित किया है कि इस विशेष मामले में फ़िल्टर का उपयोग करने के बजाय यह बेहतर विकल्प क्यों हो सकता है।
गुयारा

एक देर से +1, लेकिन सत्रों के बजाय कुकीज़ का उपयोग किया जाना चाहिए। मूल रूप से सत्रों का उपयोग कभी नहीं किया जाना चाहिए क्योंकि वे सभी प्रकार से बहुत अधिक समस्याग्रस्त हैं।
मार्क कप्लून

बहुत मदद की .. धन्यवाद
फैसल रमजान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.