প্রথম পৃষ্ঠায় বিভিন্ন সংখ্যক পোস্ট রয়েছে


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 কে বলতে পারতাম প্রথম পৃষ্ঠায় কতগুলি পোস্ট এবং বাকী ...
নরিক্সক্সিক্স

কেন আপনার এইভাবে এটি করা দরকার। যে কোনও বিশেষ কারণ
পিটার গুজন

শুধু আমার ক্লায়েন্টের স্বার্থপরতা। আমি ডাব্লুপি_পেজনাভি ব্যবহার করি বা না করি সে বিষয়ে আমি আসলেই চিন্তা করি না। আমি অন্য কোন কৌশল ব্যবহার করতে পারি?
নোরিক্সেক্সএক্স

2
প্রথম 'caller_ get_ posts'বন্ধে স্পেস রয়েছে এবং এটি বৈধ নয়। দ্বিতীয়ত, এটি অবমূল্যায়ন। ignore_sticky_postsপরিবর্তে ব্যবহার করুন।
কায়সার

আপনার হোম পৃষ্ঠা, এটি কি কোনও সাধারণ হোমপেজ বা প্রথম পৃষ্ঠার মতো সেট
পিটার গুসেন

উত্তর:


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; 

    ?>

ধাপ ২

pre_get_postsহোম পেজে প্রদর্শিত আপনার কাস্টম শৈলীটি প্রধান ক্যোয়ারিতে যুক্ত করতে প্রধান ক্যোয়ারী পরিবর্তন করতে ব্যবহার করুন ।

ধাপ 3

এখন, posts_per_pageবিকল্পটি পিছনের প্রান্ত থেকে সেট করুন (যা আমি ধরে নিলাম 2) এবং এটি offsetব্যবহার করুন যা আপনার সেট করুন । এটি 1আপনার এক পৃষ্ঠায় 3 টি এবং বাকী 2 টি পোস্টের প্রয়োজন হবে

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

পদক্ষেপ 4

প্রথম পৃষ্ঠায়, একটি পৃষ্ঠায় আপনার তিনটি পোস্ট পেতে আপনাকে 3 টি যোগ offsetকরতে posts_per_pageহবে।

$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 বছর আগের থেকে, তবে কাস্টম ক্যোয়ারী ব্যবহার করার সময় অন্য যে কেউ এই সমাধানটির সন্ধান করছেন তার জন্য আরেকটি সমাধান, এটি কীভাবে করবেন তা এখানে। এই উদাহরণে প্রথম পৃষ্ঠার জন্য 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 পোস্ট দেখাতে শুরু করবে।
লেম্যানমান্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.