पहले पृष्ठ पर विभिन्न पदों की संख्या है


12

मुझे पहले पृष्ठ पर प्रति पृष्ठ एक अलग मात्रा में पोस्ट करने की आवश्यकता है जो अन्य पृष्ठों पर है।

उदाहरण के लिए, मुझे यही चाहिए

  • कुल पद: 6
  • पहला पृष्ठ: 3 पोस्ट दिखा रहा है
  • निम्नलिखित पृष्ठ: प्रति पृष्ठ 2 पोस्ट दिखा रहा है

यहाँ मेरा कोड है:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

$fp_limit = 3; // first page limit
$limit = 2; // following page limit
$offset = 0; // default offset

if( $paged == 1 ) {
    $limit = $fp_limit;
} else {
    $offset = $fp_limit + ( ($paged - 2) * $limit );
}

$args = array(
    'post_type' => 'my_post_type',
    'post_status' => 'publish',
    'offset' => $offset,
    'posts_per_page' => $limit,
    'caller_ get_ posts' => -1, // remove sticky post
    'paged' => $paged,
    'tax_query' => array(
        array(
            'taxonomy' => 'my_taxo',
            'field' => 'slug',
            'terms' => array('slug1', 'slug2', 'slug3')
        )
    )
);
$my_query = null;
$my_query = new WP_Query($args);

// basic loop
if( $my_query->have_posts() ) : 
while ($my_query->have_posts()) : $my_query->the_post();

...

endwhile; endif; // archive loop
if (function_exists('wp_pagenavi')){ wp_pagenavi( array( 'query' => $my_query ) ); }

wp_reset_query();

संग्रह में पहले पृष्ठ पर, यह कोड मानता है:

खैर, कुल 6 पोस्ट और प्रति पेज 3 पोस्ट। इसलिए मुझे 2 पुरालेख पृष्ठ और आपके द्वारा प्रस्तुत पृष्ठांकन की आवश्यकता है:

[1] [2]

हालाँकि, संग्रह में कोई अन्य पृष्ठ कोड मानता है:

खैर, कुल 6 पोस्ट और प्रति पेज 2 पोस्ट। इसलिए मुझे 3 पुरालेख पृष्ठ और आपके द्वारा प्रस्तुत पृष्ठांकन की आवश्यकता है:

[1] [2] [3]

इसे ठीक करने के लिए थोड़ी मदद चाहिए।


अगर केवल मैं WP_pagenavi को बता सकता हूं कि 1 पेज और बाकी पर कितने पद हैं ...
norixxx

आपको इस तरह से करने की आवश्यकता क्यों है। किसी विशेष कारण
पीटर गोयन ने

बस मेरे मुवक्किल का स्वार्थ। मुझे वास्तव में परवाह नहीं है कि मैं wp_pagenavi का उपयोग करता हूं या नहीं। मैं किसी भी अन्य तकनीक का उपयोग कर सकता हूं?
norixxx

2
सबसे पहले 'caller_ get_ posts'रिक्त स्थान शामिल हैं और मान्य नहीं है। दूसरा, यह पदावनत है। ignore_sticky_postsइसके बजाय उपयोग करें ।
कासर जूल 25'14

आपका होम पेज, क्या यह एक सामान्य होमपेज है या फ्रंट पेज के रूप में सेट किया गया है
पीटर गोअन

जवाबों:


22

संपादित करें - उत्तरवर्ती

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

मुझे अभी भी विश्वास है कि आप मुखपृष्ठ पर हैं और इस तरह भी व्यवहार करेंगे। तो यह मेरा नया उपाय है

चरण 1

मुखपृष्ठ से कस्टम क्वेरी निकालें और इसे डिफ़ॉल्ट लूप से बदलें

<?php

        if ( have_posts() ) :
            // Start the Loop.
            while ( have_posts() ) : the_post();

                ///<---YOUR LOOP--->

            endwhile;

                //<---YOUR PAGINATION--->   

            else : 

                //NO POSTS FOUND OR SOMETHING   

            endif; 

    ?>

चरण 2

pre_get_postsहोम पेज पर प्रदर्शित करने के लिए अपनी कस्टम टैक्सोनॉमी को मुख्य क्वेरी में जोड़ने के लिए मुख्य क्वेरी को बदलने के लिए उपयोग करें ।

चरण 3

अब, posts_per_pageपीछे के छोर से सेट विकल्प प्राप्त करें (जो मुझे लगता है कि 2 है) और अपना सेट भी करें offsetजिसका हम उपयोग करने जा रहे हैं। ऐसा ही होगा 1क्योंकि आपको पेज एक पर 3 और बाकी हिस्सों पर 3 पोस्ट की आवश्यकता होगी

$ppg = get_option('posts_per_page');
$offset = 1;

चरण 4

पेज एक पर, आप जोड़ने की आवश्यकता होगी offsetकरने के लिए posts_per_pageपेज एक पर अपने तीन पदों को पाने के लिए 3 को जोड़ देगा।

$query->set('posts_per_page', $offset + $ppp);

कदम 5

आपको अपने offsetसभी बाद के पृष्ठों पर आवेदन करना होगा , अन्यथा आपको अगले पृष्ठ पर पृष्ठ के अंतिम पोस्ट की पुनरावृत्ति मिलेगी

$offset = $offset + ( ($query->query_vars['paged']-1) * $ppp );
$query->set('posts_per_page',$ppp);
$query->set('offset',$offset); 

चरण 6

अंत में, आपको अपनी ऑफसेट को घटाना होगा found_postsअन्यथा अंतिम पृष्ठ पर आपका पृष्ठांकन गलत होगा और आपको एक 404त्रुटि देगा क्योंकि गलत पोस्ट गिनती के कारण अंतिम पोस्ट गायब होगी

नोट: कोड के इस टुकड़े ने खोज पृष्ठ पर पृष्ठांकन तोड़ दिया। यह अब तय हो गया है, अद्यतन कोड देखें

function homepage_offset_pagination( $found_posts, $query ) {
    $offset = 1;

    if( $query->is_home() && $query->is_main_query() ) {
        $found_posts = $found_posts - $offset;
    }
    return $found_posts;
}
add_filter( 'found_posts', 'homepage_offset_pagination', 10, 2 );

सभी एक साथ

इस तरह आपकी पूरी क्वेरी उसी तरह दिखेगी, जैसे कि फ़ंक्शन में जाना चाहिए

function tax_and_offset_homepage( $query ) {
  if ($query->is_home() && $query->is_main_query() && !is_admin()) {
    $query->set( 'post_type', 'my_post_type' );
    $query->set( 'post_status', 'publish' );
    $query->set( 'ignore_sticky_posts', '-1' );
    $tax_query = array(
        array(
            'taxonomy' => 'my_taxo',
            'field' => 'slug',
            'terms' => array('slug1', 'slug2', 'slug3')
        )
    );
    $query->set( 'tax_query', $tax_query );
    $ppp = get_option('posts_per_page');
    $offset = 1;
    if (!$query->is_paged()) {
      $query->set('posts_per_page',$offset + $ppp);
    } else {
      $offset = $offset + ( ($query->query_vars['paged']-1) * $ppp );
      $query->set('posts_per_page',$ppp);
      $query->set('offset',$offset);
    }
  }
}
add_action('pre_get_posts','tax_and_offset_homepage');

function homepage_offset_pagination( $found_posts, $query ) {
    $offset = 1;

    if( $query->is_home() && $query->is_main_query() ) {
        $found_posts = $found_posts - $offset;
    }
    return $found_posts;
}
add_filter( 'found_posts', 'homepage_offset_pagination', 10, 2 );

4

मुझे पता है कि यह 1000 साल पहले से है, लेकिन किसी अन्य व्यक्ति के लिए कस्टम समाधान का उपयोग करते समय इस समाधान की तलाश में एक और समाधान, यहां बताया गया है कि यह कैसे करना है। इस उदाहरण में 1 पृष्ठ को 10 पदों की आवश्यकता है और प्रत्येक बाद के पृष्ठ को 9 की आवश्यकता है।

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
if( $paged == 1 ) {
   $limit = 10;
} else {
   $limit = 9;
}

और फिर सरणी में इसका उपयोग करें:

'posts_per_page' => $limit,

अब आप जाने के लिए अच्छे हैं।


2
यह काम नहीं करेगा। इसके साथ आपके पास पोस्ट # 10 दो बार प्रदर्शित होगी। जब से दूसरे पृष्ठ पर जा रहे हैं तो यह "विचार" करेगा कि पहले पृष्ठ पर भी 9 पोस्ट प्रदर्शित किए गए थे और इसलिए पोस्ट # 10 दिखाना शुरू कर देंगे, हालांकि यह पहले से ही पहले पृष्ठ पर प्रदर्शित हो गया है।
लेमनक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.