লুপের মধ্যে বর্তমান পোস্ট সূচি নম্বর প্রিন্ট করুন


17

আমি ওয়ার্ডপ্রেসে কাজ করছি যেখানে লুপের মধ্যে পোস্ট পেতে আমার নিম্নলিখিত কোড রয়েছে।

        <?php
                $posts = $woo_options['woo_latest_entries'];
                query_posts('post_type=post&category_name=company');
                if ( have_posts() ) : while ( have_posts() ) : the_post(); $count++;

        ?>

        /// Post Content Goes Here //

        <?php endwhile; endif; ?>

লুপের অভ্যন্তরে কোন আউটপুট পোস্ট এই জাতীয় কিছু ...

Post Goes Here ....

Other Post Goes Here ....

Another Post Goes Here ....
.....

আমি চাই লুপের মধ্যে বর্তমান পোস্ট সূচি নম্বর প্রিন্ট করা। উদাহরণ

 1. Post Goes Here ....

 2. Other Post Goes Here ....

 3. Another Post Goes Here ....
 .....

আমি কীভাবে এটি অর্জন করতে পারি? ধন্যবাদ।

সম্পাদনা

ওহ! আমি এটি এইভাবে করতে পারি ..

<?php 
echo $wp_query->current_post +1; 
?>

অন্য কোন / ভাল উপায় আছে?

উত্তর:


16

আসলে আমি পোস্টের সূচী অনুসারে আইডি নির্ধারণ করতে চাই!

আপনার কোডটি আমি এখানে পরিবর্তন করেছি।

<?php

global $wp_query;

$posts = $woo_options['woo_latest_entries'];
query_posts('post_type=post&category_name=company');

if ( have_posts() ) : while ( have_posts() ) : the_post();  $count++;
    $index = $wp_query->current_post + 1;

?>
    <div id="my_post_<?php echo $index; ?>">

        <!-- Post Content Goes Here -->

    </div>

<?php endwhile; endif; ?>

দেখে মনে হচ্ছে এই উত্তরটি উত্তরের সারাংশ সরবরাহ করেছে যা সমাধানের দিকে নিয়ে যায়।
নিউ আলেকজান্দ্রিয়া

4

যদি এটি কেবল একটি উদ্বেগজনক জিনিস এবং আপনার আরও কোডিংয়ের জন্য গণনা ভেরিয়েবল ব্যবহার করার প্রয়োজন না হয় তবে আপনি কেবল আপনার পোস্টগুলিকে একটি ট্যাগগুলিতে গুটিয়ে রাখতে পারেন ol:

<?php if ( have_posts() ) : ?>

    <ol>

        <?php while ( have_posts() ) : the_post(); ?>

            <li> <!-- Post Content Goes Here --> </li>

        <?php endwhile; ?>

    </ol>

<?php endif; ?>

আসলে আমি পোস্টের সূচী অনুসারে আইডি নির্ধারণ করতে চাই!
MANnDAaR

@ মানড্ডআআআআআআআআআর, এটি ঠিক তাই করে। যদি আপনার লুপে 10 টি পোস্ট থাকে তবে আপনি 1 থেকে 10 নম্বর অনুযায়ী একটি অর্ডার করা তালিকা দেখতে পাবেন (উদাহরণটি এখানে দেখুন )
মাইকে

3

কোনও কারণে, ইতিমধ্যে আপনার লুপে একটি পাল্টা পরিবর্তনশীল রয়েছে; যদি এটি অন্য উদ্দেশ্যে ব্যবহার না করা হয় তবে কেবল এটি প্রতিধ্বনি করুন:

<?php echo $count.'.'; ?> /// Post Content Goes Here // 

1

হাইও আমি এই থ্রেডটির উপর ঝাঁপিয়ে পড়েছি, কীভাবে তা কীভাবে করব তা ভেবে অবাক হয়েছি। এটি রক্তাক্ত সহজ। মূল টেমপ্লেট ফাইলে, উদাহরণস্বরূপ index.php, লুপের আগে একটি ভেরিয়েবল $ post_idx ঘোষণা করুন এবং লুপের ইনক্রিমেন্টের মধ্যে যা ভেরিও হয়। এটার মত:

<?php $post_idx = 0; while ( have_posts() ) : the_post(); ?>
  <?php
    get_template_part( 'content', get_post_format() );
    $post_idx++;
  ?>
<?php endwhile; ?>

তারপরে আপনার সামগ্রী টেমপ্লেটে (উদাহরণস্বরূপ Content.php) যা প্রতিটি সময় লুপের মধ্যে কার্যকর হয়, কেবলমাত্র _ post_idx গ্লোবাল করুন এবং তারপরে এটি আপনার প্রয়োজনের জন্য ব্যবহার করুন:

global $post_idx;
print "<p>{$post_idx}</p>";

এটাই!


নামকরণ সংঘর্ষগুলি এড়ানোর জন্য আপনার গ্লোবাল ভেরিয়েবলগুলি উপসর্গ করা উচিত।
ফুসিয়া

0

আমি একই জিনিস করতে খুঁজছিলাম, কিন্তু লুপ বাইরে। মূলত আমি তার আইডি থেকে কোনও পোস্টের সূচীটি বের করতে সক্ষম হতে চাইতাম। আমি এখানে যা এলাম তা এখানে:

<?php
function sleek_get_post_index ($post) {
    $allPosts = get_posts([
        'post_type' => $post->post_type,
        'numberposts' => -1
    ]);

    $index = 0;

    foreach ($allPosts as $p) {
        $index++;

        if ($p->ID == $post->ID) {
            break;
        }
    }

    return $index;
}

এটি নিখুঁতভাবে ডিজাইনের জন্য ছিল কারণ ক্লায়েন্ট পোস্টগুলির পাশের নম্বরগুলি চেয়েছিল, এমনকি যদি পোস্টটি কোনও "বৈশিষ্ট্যযুক্ত পোস্ট" বাক্সে থাকে। আমিও ব্যবহার করে একটি শূন্য যোগ করেছেন: <?php echo str_pad(sleek_get_post_index($post), 2, '0', STR_PAD_LEFT) ?>


0

এমনকি যদি এই প্রশ্নটি পুরানো হয় তবে গুগল অনুসন্ধান থেকে কারও কাছে আরও নমনীয় উত্তর প্রয়োজন হলে আমি এটি এখানে রেখে দেব।

সময়ের সাথে সাথে, আমি WP_Queryবিশ্বব্যাপী ক্যোয়ারী অগ্নিস্টিক হওয়ার সমাধান তৈরি করেছি ped আপনি যখন কোনও কাস্টম ব্যবহার করেন WP_Query, আপনি কেবল নিজের ব্যবহার includeবা requireভেরিয়েবলগুলি ব্যবহার করতে সীমাবদ্ধ থাকেন $custom_queryতবে কিছু ক্ষেত্রে (যা আমার পক্ষে বেশিরভাগ ক্ষেত্রে!), আমি তৈরি টেম্পলেট অংশগুলি কিছু সময় বৈশ্বিক ক্যোয়ারিতে ব্যবহৃত হয় (যেমন সংরক্ষণাগার টেম্পলেট হিসাবে) বা একটি কাস্টম WP_Query(যেমন প্রথম পৃষ্ঠায় একটি কাস্টম পোস্ট টাইপ জিজ্ঞাসা)। এর অর্থ হ'ল ক্যোয়ারের ধরণ ছাড়াই বিশ্বব্যাপী অ্যাক্সেসযোগ্য হওয়ার জন্য আমার একটি কাউন্টার দরকার need ওয়ার্ডপ্রেস এটি উপলভ্য করে না, তবে কয়েকটি হুকের জন্য ধন্যবাদ এটি কীভাবে করা যায় তা এখানে।

এটি আপনার ফাংশন.পিপিতে রাখুন Place

/**
 * Create a globally accessible counter for all queries
 * Even custom new WP_Query!
 */

// Initialize your variables
add_action('init', function(){
    global $cqc;
    $cqc = -1;
});

// At loop start, always make sure the counter is -1
// This is because WP_Query calls "next_post" for each post,
// even for the first one, which increments by 1
// (meaning the first post is going to be 0 as expected)
add_action('loop_start', function($q){
    global $cqc;
    $cqc = -1;
}, 100, 1);

// At each iteration of a loop, this hook is called
// We store the current instance's counter in our global variable
add_action('the_post', function($p, $q){
    global $cqc;
    $cqc = $q->current_post;
}, 100, 2);

// At each end of the query, we clean up by setting the counter to
// the global query's counter. This allows the custom $cqc variable
// to be set correctly in the main page, post or query, even after
// having executed a custom WP_Query.
add_action( 'loop_end', function($q){
    global $wp_query, $cqc;
    $cqc = $wp_query->current_post;
}, 100, 1);

এই সমাধানটির সৌন্দর্যটি হ'ল, আপনি একটি কাস্টম ক্যোয়ারিতে প্রবেশ করার পরে এবং সাধারণ লুপটিতে ফিরে আসার সাথে সাথে এটি কোনওভাবেই ডান কাউন্টারে পুনরায় সেট করতে চলেছে। যতক্ষণ আপনি কোনও প্রশ্নের ভিতরে রয়েছেন (যা ওয়ার্ডপ্রেসে সর্বদা ক্ষেত্রে থাকে, আপনি কি জানেন না) আপনার কাউন্টারটি সঠিক হতে চলেছে। মূল ক্যোয়ারী একই ক্লাসের সাথে মৃত্যুদন্ড কার্যকর করার কারণেই!

উদাহরণ:

global $cqc;
while(have_posts()): the_post();
    echo $cqc; // Will output 0
    the_title();

    $custom_query = new WP_Query(array('post_type' => 'portfolio'));
    while($custom_query->have_posts()): $custom_query->the_post();
        echo $cqc; // Will output 0, 1, 2, 34
        the_title();
    endwhile;

    echo $cqc; // Will output 0 again
endwhile;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.