루프 내에서 현재 포스트 인덱스 번호 인쇄


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

어떻게하면 되나요? 감사.

편집하다

오! 나는 이렇게 할 수 있습니다 ..

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

다른 / 더 나은 방법이 있습니까?

답변:


16

사실 난 후 지수에 따라 할당 ID의 원하는!

여기 내가 수정 한 코드가 있습니다.

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

이 답변이 솔루션으로 이어질 대답의 본질을 제공하는 것 같습니다.
새로운 Alexandria

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

실제로 게시물 색인 당 ID를 할당하고 싶습니다!
MANnDAaR

@ MANNDAaR, 그것이 정확히하는 일입니다. 루프에 10 개의 게시물이있는 경우 1에서 10까지 번호가 매겨진 순서화 된 목록이 표시됩니다 ( 여기 예제 참조 )
mike23

3

어떤 이유로, 당신은 이미 루프에서 카운터 변수가; 이 다른 목적으로 이용되지 않는 경우, 단순히 에코 :

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

1

안녕하세요,이 스레드에 부딪 쳤습니다. 그것은 피의 쉬운 것을 알았습니다. 기본 템플릿 파일 (예 : index.php)에서 루프 앞에 변수 $ post_idx를 선언하고 루프 내에서 var를 증가시킵니다. 이처럼 :

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

나는 똑같은 일을하고 싶었지만 루프 밖에서. 기본적으로 ID에서 게시물의 색인을 찾을 수 있기를 원했습니다. 내가 생각해 낸 것은 다음과 같습니다.

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

게시물 자체가 '추천 게시물'상자에 있더라도 고객이 게시물 옆에 숫자를 원했기 때문에 이것은 순전히 디자인을위한 것입니다. 또한 다음을 사용하여 선행 0을 추가했습니다 <?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(앞 페이지에서 사용자 정의 포스트 유형을 쿼리 등). 그 말은 내가 상관없이 쿼리의 종류 세계적으로 액세스 할 수 카운터를 필요. 워드 프레스는이 사용할 수 있도록하지만, 여기가 일부 후크 덕분에 일어날 수 있도록하는 방법은 없습니다.

당신의 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);

이 솔루션의 장점은 사용자 지정 쿼리를 입력하고 일반 루프로 돌아 오면 어느 쪽이든 올바른 카운터로 재설정된다는 것입니다. 쿼리 내에 있으면 (워드 프레스에서는 항상 그렇습니다), 카운터는 정확할 것입니다. 기본 쿼리가 동일한 클래스로 실행되기 때문입니다!

예 :

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.