এলোমেলোভাবে অর্ডার করা পোস্টগুলিকে সঠিকভাবে পৃষ্ঠাবদ্ধ করা সম্ভব?


30

আমি ওয়ার্ডপ্রেস সহায়তাতে এই সমস্যাটি পেয়েছি এবং দুর্ভাগ্যক্রমে বিষয়টি এখন বন্ধ। আমার এই একই সমস্যা আছে ... (নীচে পড়ুন)


আমরা একটি সাইট তৈরি করেছি যেখানে সদস্যগণ পছন্দের বই, চলচ্চিত্র, গান ইত্যাদির মতো জিনিসগুলির সুপারিশ করতে পারেন এই সমস্যার জন্য আমি চলচ্চিত্রের পৃষ্ঠাটি উদাহরণ হিসাবে ব্যবহার করব।

"মুভিজ" পৃষ্ঠাটি শেষ পর্যন্ত একটি কাস্টম পৃষ্ঠার টেম্পলেট যা ওয়ার্ডপ্রেসকে "চলচ্চিত্র" (বিভাগ 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 এলোমেলো সিনেমার শিরোনামগুলির পরিবর্তে কয়েকটি পুনরাবৃত্ত চলচ্চিত্রের শিরোনাম পোস্ট রয়েছে etc.

আমার প্রশ্নটি হ'ল - পৃষ্ঠা 1 এ অন্তর্ভুক্ত র্যান্ডম 10 টি পোস্টগুলিকে "মনে রাখার" জন্য ওয়ার্ডপ্রেস পাওয়ার জন্য আমি এই কোডটিতে কী যুক্ত করতে পারি এবং তারপরে পৃষ্ঠা, 2, 3, ইত্যাদিতে 10 পোস্টের একটি নতুন সেট পেতে পারি? সমস্ত পোস্ট প্রদর্শিত হয়। আমি 10 পৃষ্ঠাগুলির এলোমেলোভাবে বাছাই করার সময় প্রতি পৃষ্ঠায় কোনও পোস্টের একমাত্র উপস্থিতি থাকতে চাই।

উত্তর:


38

আপনি WP_query এর অর্ডার বাই স্টেটমেন্টটি সংশোধন করতে একটি ফিল্টার ব্যবহার করতে পারেন।

এইভাবে আপনি নিজের হাতে র‌্যান্ড ($ বীজ) এর অর্ডারটি ব্যবহার করার জন্য ম্যানুয়ালি কোয়েরি সেট করতে পারেন;

মাইএসকিএল র‌্যান্ড () একটি বীজকে alচ্ছিক যুক্তি হিসাবে স্বীকার করে। বীজ ব্যবহার করে, এটি প্রতিবার একই র্যান্ডমাইজড ফলাফল সেট করবে।

সুতরাং আপনি প্রথম পৃষ্ঠার লোডে একটি এলোমেলো সংখ্যা তৈরি করতে পারেন তারপর এটি একটি সেশন ভেরিয়েবলে সংরক্ষণ করুন এবং এটি আরও বিকাশযুক্ত অনুরোধগুলির জন্য $ বীজ হিসাবে ব্যবহার করুন।

যদি আপনি উদাহরণস্বরূপ আপনার মূল লুপটিতে এটি অর্জন করার চেষ্টা করছেন তবে আপনি নিম্নলিখিতগুলি আপনার ফাংশন.এফপি ফাইলটিতে যুক্ত করতে পারেন।

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একটি এলোমেলো সংখ্যা। আপনার এটি পিএইচপি সেশন ভেরিয়েবল হিসাবে সঞ্চয় করা উচিত। session_start()আপনাকে কল করে ওয়ার্ডপ্রেসে পিএইচপি সেশন সক্ষম করতে ভুলবেন না functions.php:

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

এই সিনট্যাক্সের সাথে আপনার posts_orderbyফিল্টারটি ব্যবহার করার দরকার নেই । তদুপরি, আপনাকে নিশ্চিত করতে হবে না যে ফিল্টারটি কেবলমাত্র লক্ষ্যযুক্ত WP_Query এ প্রয়োগ হয়েছে।

আরও তথ্যের জন্য দয়া করে এই টিকিটটি ওয়ার্ডপ্রেস কোরটিতে পড়ুন।


উত্তরটি প্রযুক্তিগতভাবে সঠিক হতে পারে তবে এটি সফল হয়।
আরটিএফএম-এ

এই বিশেষ ক্ষেত্রে ফিল্টার ব্যবহার না করে কেন এটি আরও ভাল পছন্দ হতে পারে তা বোঝাতে আমি আমার উত্তর সম্পাদনা করেছি।
গুইচারা

দেরিতে +1, তবে সেশনের পরিবর্তে কুকি ব্যবহার করা উচিত। মূলত সেশনগুলি কখনই ব্যবহার করা উচিত নয় কারণ এগুলি সব ধরণের ক্ষেত্রে খুব সমস্যাযুক্ত।
মার্ক কাপলুন

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