Aktuelle Beitragsindexnummer innerhalb der Schleife drucken


17

Ich arbeite an WordPress, wo ich folgenden Code habe, um Beiträge innerhalb der Schleife zu bekommen.

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

Welche Ausgabe gibt es in Loops?

Post Goes Here ....

Other Post Goes Here ....

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

Ich möchte, dass die Indexnummer der aktuellen Beiträge in der Schleife gedruckt wird. Beispiel

 1. Post Goes Here ....

 2. Other Post Goes Here ....

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

Wie kann ich das erreichen? Vielen Dank.

BEARBEITEN

Ohh! Ich kann es auf diese Weise tun ..

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

Gibt es einen anderen / besseren Weg?

Antworten:


16

Eigentlich möchte ich IDs nach Beitragsindex vergeben!

Hier ist Ihr Code, den ich geändert habe.

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

Es scheint, als ob diese Antwort das Wesentliche der Antwort war, die zur Lösung führte.
New Alexandria

4

Wenn es nur eine ästhetische Sache ist und Sie die Zählvariable nicht für die weitere Codierung verwenden müssen, können Sie Ihre Beiträge einfach in ein olTag einwickeln :

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

    <ol>

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

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

        <?php endwhile; ?>

    </ol>

<?php endif; ?>

Eigentlich möchte ich IDs nach Beitragsindex vergeben!
MANNDAaR

@MANnDAaR, genau das macht es. Wenn Ihre Schleife 10 Beiträge hat, dann würden Sie eine geordnete Liste sehen, nummeriert von 1 bis 10 (siehe Beispiel hier )
mike23

3

Aus irgendeinem Grund haben Sie bereits eine Zählervariable in der Schleife. Wenn dies nicht für andere Zwecke verwendet wird, geben Sie es einfach wieder:

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

1

Hallo, ich bin auf diesen Thread gestoßen und habe mich gefragt, wie ich das auch machen soll. Fand heraus, dass es verdammt einfach ist. Deklarieren Sie in der Hauptvorlagendatei, zum Beispiel index.php, eine Variable $ post_idx vor der Schleife und innerhalb der Schleife inkrementieren Sie diese Variable. So was:

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

Machen Sie dann in Ihrer Inhaltsvorlage (zum Beispiel content.php), die jedes Mal innerhalb der Schleife ausgeführt wird, einfach $ post_idx global und verwenden Sie es entsprechend Ihren Anforderungen:

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

Das ist es!


Sie sollten globale Variablen voranstellen, um Namenskollisionen zu vermeiden.
fuxia

0

Ich wollte das Gleiche tun, aber außerhalb der Schleife. Grundsätzlich wollte ich in der Lage sein, den Index eines Beitrags anhand seiner ID herauszufinden. Folgendes habe ich mir ausgedacht:

<?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;
}

Dies diente lediglich der Gestaltung, da der Kunde Nummern neben den Posts wünschte, auch wenn sich der Post für sich in einem "vorgestellten Post" -Kasten befand. Ich habe auch eine führende Null mit: <?php echo str_pad(sleek_get_post_index($post), 2, '0', STR_PAD_LEFT) ?>.


0

Auch wenn diese Frage alt ist, werde ich sie hier stellen, falls jemand aus einer Google-Suche eine flexiblere Antwort benötigt.

Im Laufe der Zeit habe ich eine Lösung entwickelt, die unabhängig von WP_Queryglobalen Abfragen ist. Wenn Sie ein benutzerdefiniertes Element verwenden WP_Query, dürfen Sie nur die Variablen Ihres Elements verwenden includeoder requirein der Lage sein, diese zu verwenden. $custom_queryIn einigen Fällen (in den meisten Fällen für mich!) Werden die von mir erstellten Vorlagenteile jedoch manchmal in einer globalen Abfrage verwendet (z. B. Archivvorlagen) oder in einer benutzerdefinierten WP_Query(z. B. Abfragen eines benutzerdefinierten Beitragstyps auf der Startseite). Das bedeutet, dass ich einen Zähler benötige, um unabhängig von der Art der Abfrage global erreichbar zu sein. WordPress stellt dies nicht zur Verfügung, aber hier ist, wie dies dank einiger Hooks geschehen kann.

Platziere dies in deiner functions.php

/**
 * 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);

Das Schöne an dieser Lösung ist, dass, wenn Sie eine benutzerdefinierte Abfrage eingeben und in die allgemeine Schleife zurückkehren, diese in beiden Fällen auf den richtigen Zähler zurückgesetzt wird. Solange Sie sich in einer Abfrage befinden (was in WordPress immer der Fall ist, wussten Sie nicht, dass dies der Fall ist), wird Ihr Zähler korrekt sein. Das liegt daran, dass die Hauptabfrage mit derselben Klasse ausgeführt wird!

Beispiel

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;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.