लूप के भीतर वर्तमान पोस्ट इंडेक्स नंबर प्रिंट करें


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

@MANnDAaR, बिलकुल यही करता है। यदि आपके लूप में 10 पोस्ट हैं, तो आपको एक आदेशित सूची दिखाई देगी, जिसकी संख्या 1 से 10. तक है (उदाहरण यहां देखें )
mike23

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>";

बस!


नामकरण टकराव से बचने के लिए आपको वैश्विक चर का उपसर्ग करना चाहिए।
FUXIA

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

यदि यह प्रश्न पुराना है, तब भी मैं इसे यहाँ रखूँगा जब कोई Google खोज से आने वाले व्यक्ति को अधिक लचीले उत्तर की आवश्यकता होगी।

समय के साथ, मैंने WP_Queryअज्ञेयवादी या वैश्विक क्वेरी होने का समाधान विकसित किया । जब आप एक कस्टम का उपयोग WP_Queryकरते हैं, तो आप केवल उपयोग करने includeया requireअपने पर चर का उपयोग करने में सक्षम होने के लिए सीमित होते हैं $custom_query, लेकिन कुछ मामलों में (जो मेरे लिए सबसे अधिक मामले हैं!), मेरे द्वारा बनाए गए टेम्पलेट भागों का उपयोग वैश्विक क्वेरी में कुछ समय के लिए किया जाता है। (जैसे आर्काइव टेम्प्लेट) या किसी कस्टम में WP_Query(जैसे फ्रंट पेज पर कस्टम पोस्ट टाइप को क्वेरी करना)। इसका मतलब है कि मुझे क्वेरी के प्रकार की परवाह किए बिना विश्व स्तर पर सुलभ होने के लिए एक काउंटर की आवश्यकता है। वर्डप्रेस इसे उपलब्ध नहीं करता है, लेकिन यहां कुछ हुक के लिए इसे कैसे बनाया जाए।

इसे अपने कार्यों में रखें

/**
 * 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;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.