ডাব্লুপি_কিউয়ারী পোস্টের সংখ্যা কীভাবে সীমাবদ্ধ করবেন?


25

আমি গুগল এবং ডাব্লুপিএসইতে গবেষণা করে চলেছি এবং কেবলমাত্র আমি বারবার দেখতে পাই তা হ'ল অবহিত করা showposts

আমি পরিচিত নই WP_Query, আর আমি চিন্তা যে যদি আমি সেট posts_per_pageআমার সীমা (অর্থাত। 5), এবং nopagingথেকে trueতা "ভালো কিছু করার জন্য হয়ে যাবে ঠিক আছে, আমি তোমাকে দিব শুধুমাত্র 5 টি "। তবে এটি কাজ করে না।

এখানে চিত্র বর্ণনা লিখুন

কিভাবে আমি এটি করতে পারব?


মাত্র'posts_per_page=5'
পিটার গুজন

আমি এটি ব্যবহার করি, তবে এটি সমস্ত পোস্ট খুঁজে পেয়েছে। যদি আমি found_postsসম্পত্তিটিতে অ্যাক্সেস করি তবে এটি 5 এর চেয়ে বেশি সংখ্যক বলে I এটা কি সম্ভব? @ পিটারগুজেন
এলিয়াসএনএস

আপনার nopagingপরামিতিটি সেট করা উচিত নয়, সেট করে সমস্ত পোস্ট পাওয়ার জন্য সত্যিকার অর্থে
পিটার গুসেন

@ পিটারগুজন আমি যদি nopagingপ্যারামিটারটি সেট না করি তবে এটি ডিফল্ট হয়ে যায় false, তাই প্রথম পৃষ্ঠাটি 5 টি পোস্ট দেখায়, তবে ক্যোয়ারিতে আরও কিছু রয়েছে। আমি প্রশ্নের একটি ইমেজ যোগ করুন।
এলিয়াসএনএস

আপনার মন্তব্যগুলি বিভ্রান্তিকর, আপনি কোনও পৃষ্ঠায় প্রদর্শিত পোস্টের পরিমাণ সীমাবদ্ধ করতে বলেছেন 5, এটিই আপনি পান। এখন, আপনি বলেছেন (আপনার পূর্ববর্তী মন্তব্যটি আবার পড়ুন :-)) ক্যোয়ারী আরও ধারণ করে। দয়া করে ব্যাখ্যা করুন. আপনি পোস্ট_পার_পৃষ্ঠা সেট করতে পারবেন না এবং তারপরে একই ক্যোয়ারীতে নো_পেজিং সেটকে সত্য হিসাবে সেট করতে পারবেন না এটি পোস্ট_প্রেজ_পৃষ্ঠা হয় বা নোপপেজিংয়ের সত্য হিসাবে সেট হয়
পিটার গুসেন

উত্তর:


43

আমি মনে করি আপনি এখন যা করার চেষ্টা করছেন তা আমি বুঝতে পেরেছি। আপনি যখন কোনও কাস্টম ক্যোয়ারী WP_Queryচালিয়েছেন এবং প্রতি পৃষ্ঠায় মাত্র ৫ টি পোস্ট পাওয়ার সীমা নির্ধারণ করবেন, তখন কেবল 5 টি পোস্টটি ক্যোয়ারী দ্বারা পুনরুদ্ধার করা হবে এবং সেই প্রশ্নের মধ্যে কেবল 5 টি পোস্ট থাকবে, তবে পৃষ্ঠাগুলির খাতিরে , কিন্তুWP_Query এখনও পুরো ডাটাবেসের মাধ্যমে চলবে এবং ক্যোয়ারীর মানদণ্ডের সাথে মেলে এমন সমস্ত পোস্ট গণনা করে।

আপনি যখন ক্যোয়ারীর বৈশিষ্ট্য $found_postsএবং $max_num_pagesবৈশিষ্ট্যগুলি দেখেন তখন এটি দেখা যায় । একটি উদাহরণ নেওয়া যাক:

আপনার ডিফল্ট পোস্ট ধরণের সাথে সম্পর্কিত 20 টি পোস্ট রয়েছে post। পৃষ্ঠাগুলি ছাড়াই আপনার কেবল সর্বশেষ 5 টি পোস্ট দরকার। আপনার ক্যোয়ারীটি এমন দেখাচ্ছে

$q = new WP_Query( 'posts_per_page=5' );
  • var_dump( $q->posts ) প্রত্যাশা অনুযায়ী সর্বশেষ 5 টি পোস্ট দেবে
  • echo $q->found_posts তোমাকে দিবে 20
  • echo $q->max_num_pages তোমাকে দিবে 4

এই অতিরিক্ত কাজের প্রভাব কেবলমাত্র কয়েকটি পোস্ট সহ সাইটগুলিতে ন্যূনতম, তবে আপনি শত বা হাজার হাজার পোস্ট সহ কোনও সাইট চালাচ্ছেন তবে এটি ব্যয়বহুল হতে পারে। আপনার যদি সর্বদা 5 টি সর্বশেষ পোস্টের প্রয়োজন হয় তবে এটি সম্পদের অপচয় waste

এমন একটি অননুমোদিত প্যারামিটার বলা হয়েছে no_found_rowsযা বুলিয়ান মান ব্যবহার করে যা আপনার প্রয়োজনীয় ৫ টি পোস্ট সন্ধানের পরে আপনি আপনার ক্যোয়ারী জামিনে ব্যবহার করতে পারেন। এটি WP_Queryকোয়েড করা পোস্টগুলির পরিমাণ পুনরুদ্ধার করার পরে মানদণ্ডের সাথে সম্পর্কিত আর কোনও পোস্ট সন্ধান করতে বাধ্য করবে । এই পরামিতির ইতিমধ্যে মধ্যে গড়ে তুলতে হয় get_posts, তাই সে জন্যই get_postsএকটু চেয়ে দ্রুত WP_Queryযদিও get_postsব্যবহারসমূহWP_Query

উপসংহার

উপসংহারে, আপনি যদি কোনও প্রশ্নের উপর পৃষ্ঠাগুলি ব্যবহার করতে যাচ্ছেন না, আপনার গতিপথটি 'no_found_rows=true'জিনিসগুলিকে গতিময় করা এবং নষ্ট হওয়া সংস্থানগুলিকে বাঁচানো সর্বদা বুদ্ধিমানের কাজ ।


3

প্রশ্নের মন্তব্যে @ পিটার গুজনের সাথে কথোপকথনের পরে, আমি মনে করি আমি প্রশ্নের উত্তর দিতে পারি এবং আমার ভুল ব্যাখ্যা করতে পারি।

মূল found_postsবিষয়টি হ'ল আমাকে বিভ্রান্ত করছে। আমি আপনাকে ধন্যবাদ জানাই যে, এই নম্বরটি পোস্টগুলি পুনরুদ্ধার করা হয়েছে তবে তা নয়। এটি মানদণ্ডের সাথে মেলে এমন পোস্টের সংখ্যা । এটি WP_Queryদুটি অংশের মতো: এটি paginationপরামিতিগুলির জন্য যাচাই করে পোস্টগুলি (সমস্ত) সন্ধানের জন্য এবং অন্যটি সামগ্রী আনার জন্য । সুতরাং আমাদের কাছে এমন $post_countসম্পত্তি রয়েছে যা প্রাপ্ত সংখ্যাগুলির সংখ্যা (কোডেক্স বলেছে The number of posts being displayed), অবশ্যই posts_per_pageপ্যারামিটারের সংখ্যার সমান এবং $postsঅ্যারের সম্পত্তিতে আইটেমের সংখ্যা ।

সুতরাং WP_Queryআমি কোনও ভাবহীন কাজ করছি না ^^

আশা করি এটি অন্যকে সহায়তা করবে!


আমার উত্তর দেখুন। আমি মনে করি আপনি যা বলতে চাইছেন তা আমি বুঝতে পেরেছি :-)
পিটার গুসেন

হ্যাঁ! আপনি এটি খুব ভালভাবে করেছেন: ডি অবশেষে আমি এটি করার উপায় পেয়েছি, এবং আমি সমস্ত বুঝতে পেরেছি = ডি ধন্যবাদ @ পিটারগুসেন!
এলিয়াসনস

সম্পন্ন! এটি আমার নিজের উত্তরটি প্রসারিত করেছে
@

1

ঠিক আছে, আপনাকে 'ব্লগপোস্টগুলি' নামক পোস্ট টাইপ করতে দেয় এবং আপনি সেই পোস্ট ধরণের 5 টি পোস্ট পেতে চান। এখানেই সব পাবেন আপনি যা করতে চান

$args = array(
        'post_type' => 'blog_posts',
        'posts_per_page' => '5',
);


$query = new WP_Query($args);

উপরের ক্যোয়ারী 'ব্লগপোস্টগুলি' টাইপের 5 টি পোস্ট ফিরিয়ে দেবে, এটি যদি কোনও কাস্টম পোস্ট টাইপ না হয় তবে কেবল এই জাতীয় প্রতিস্থাপন করুন 'post_type' => 'posts',যদি আপনি সমস্ত পোস্ট পেতে চান তবে এই জাতীয় প্রতিস্থাপন করুন 'posts_per_page' => '-1',, আরও তথ্যের জন্য ডাব্লুপি কোয়েরি


প্রশ্নে মন্তব্য দেখুন, দয়া করে।
এলিয়াসএনএস

1

আমি জানি যে @ ব্যবহারকারী1750063 কোডটি উল্লেখ করেছে তবে এটি ব্যবহার করে দেখুন

$args = array (
    'post_type'              => 'custom_post',
    'nopaging'               => false,
    'posts_per_page'         => '5',
    'order'                  => 'DESC',
    'orderby'                => 'ID',
);

$query = new WP_Query( $args );

if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();
        // display content
    }
} else {
    // display when no posts found
}

wp_reset_postdata();     // Restore original Post Data

idorderbyমান হিসাবে অবৈধ এবং paginationএকটি অবৈধ পরামিতি
পিটার গুসেন

paginationকোনও বৈধ প্যারামিটার নয়। মানে 'nopaging' => true? যদি হ্যাঁ, তবে আমি সমস্ত পোস্ট পেয়ে যাব। এটাই আমি চাই না। @ পিটারগুজন আমার মনে হয় তার মানে ID
এলিয়াসএনএস

অর্ডারবাই অর্ডার প্রদর্শনের জন্য, তাই না? এটি নোপেজিং মান / প্যারামিটারের ক্ষতি করে না। @ পিটারগুজেন কেন আইডি ও অর্ডারবাই অবৈধ? আপনি বিষয়টি পরিষ্কার করতে পারেন?
শ্রেয়ো গি

এটি হওয়া উচিত ID, নয়id
পিটার গুজন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.