Вивести номер індексу поточного повідомлення в циклі


17

Я працюю над WordPress, де в мене є наступний код, щоб отримувати повідомлення в циклі.

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

Як я можу досягти цього? Спасибі.

EDIT

Ох! Я можу зробити це так ..

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

Якщо це просто естетична річ і вам не потрібно використовувати змінну count для подальшого кодування, ви можете просто загортати свої повідомлення в 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(наприклад, запит користувацького типу публікації на головній сторінці). Це означає, що мені потрібен лічильник, щоб бути глобально доступним незалежно від виду запиту. WordPress не робить це доступним, але ось, як це зробити, завдяки деяким гачкам.

Розмістіть це у своїх function.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);

Краса цього рішення полягає в тому, що, коли ви вводите користувацький запит і повертаєтеся в загальний цикл, він буде повернутись до потрібного лічильника в будь-якому випадку. Поки ви знаходитесь у запиті (що завжди має місце в WordPress, мало що ви знали), ваш лічильник буде правильним. Це тому, що основний запит виконується з тим самим класом!

Приклад:

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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.