같은 날짜의 다른 게시물이 있으면 게시물에 날짜가 표시되지 않습니다


19

맞춤 게시물 유형 '보도'가 있습니다. 해당 유형의 게시물을 쿼리하는 페이지 템플릿을 만들었습니다. 게시물은 게시 된 날짜를 표시하지만 날짜가 같은 게시물이 두 개 이상인 경우 첫 번째 게시물 만 날짜를 표시하고 다른 게시물은 표시하지 않습니다. 모든 게시물의 날짜를 표시하는 방법이 있습니까?

여기에 이미지 설명을 입력하십시오

<?php get_header(); ?>
<?php
$wp_query = new WP_Query();
$wp_query -> query('post_type=press&showposts=100');
while ($wp_query->have_posts()) : $wp_query->the_post(); ?>
<div id="press">
<div class="press-item cf">
<div class="press-img"><a href="<?php the_field('link'); ?>"><?php the_post_thumbnail('medium');?></a> </div>
<div class="press-content">
<div class="press-title"><a href="<?php the_field('link'); ?>"><?php echo get_the_title(); ?></a> </div>
<div class="press-excerpt"><?php the_excerpt(); ?> </div>
<div class="press-date"><?php the_date(); ?></div>
</div>
</div>
</div>
<?php endwhile;  ?>
<?php get_footer(); ?>

답변:


40

날짜 기능을 수정했기 때문에 과거에 비슷한 문제가 발생했습니다. 그런 다음 게시물마다 날짜가 다르면 날짜가 표시되고 그렇지 않으면 빈칸으로 돌아갑니다.

<?php echo get_the_date(); ?>대신 추가해보십시오 .


26

왜 표시되지 않습니까?

the_date()함수 의 소스를 보면 두 개의 전역이 있습니다.

global $currentday, $previousday;

그리고 표시 할 날짜가 있다면 규칙이 있습니다 ... 검사는 다음과 같은 검사와 유사합니다 is_new_day().

if ( $currentday != $previousday ) {

    // show date

    // Set global
    $previousday = $currentday;
}
// else
return null;

보시다시피, $previousday즉시로 설정됩니다 $currentday;. 따라서 한 번 에코됩니다. 그 직후에는 두 날이 동일하며 확인이 실패합니다. 이것이 첫 번째 게시물이 표시하는 이유이지만 다른 게시물에는 표시되지 않습니다.

왜 보이나요?

글로벌이 euqalized 된 후 왜 둘 이상의 날짜를 표시하는지 스스로에게 물어 보면를 살펴 봐야setup_postdata() 합니다. 이 함수는 호출되어 the_post();루프의 단일 게시물에 대한 모든 것을 설정합니다.

if ( have_posts() )
{
    while ( have_posts() )
    {
        the_post(); # <-- Calls setup_postdata( $post );

        // your loop stuff here
    }
}

내부는 setup_postdata()이해하기 매우 쉽습니다 (최소한 글로벌이 설정 한 내용).

$currentday = mysql2date('d.m.y', $post->post_date, false);
$currentmonth = mysql2date('m', $post->post_date, false);

움직이는 부품이되도록 $previousday하는에 대해 $currentday글로벌 설정 및 확인됩니다. 이 경우를 제외하고 그리고 새로운 일이 , the_date()아무것도 표시되지 않습니다.

게시물을 완전히 다른 요일 로 설정 하면 갑자기 각 게시물에 날짜가 표시됩니다.

그 뒤에 아이디어는 무엇입니까?

실제로 아이디어는 v0.7.1 이후로 매우 간단하고 존재합니다. 적어도 phpDocBlock의 상태는 다음과 같습니다. 왜 아카이브에 각 게시물의 날짜를 표시 하시겠습니까? 아카이브는 다음과 같습니다.

+--------------+
| 28.10.2014   |
+--------------+
| Post Title A |
| Post Title B |
+--------------+
| 29.10.2014   |
+--------------+
| Post Title C |
| Post Title D |
+--------------+

당신은 그것에 동의하지 않습니까? 글쎄, 당신은 단순히 완전히 다른 것으로 의도 된 기능을 사용하고 있습니다.

get_the_date()작동하고 올바른 방법으로 사용 하는가

the_date()함수 의 if / else (글로벌 검사)의 영향을받지 않습니다 . 또한 필터 가 없습니다 . 그것을 고치는 방법? 단순한:

echo apply_filters( 'the_date', get_the_date(), get_option( 'date_format' ), '', '' );

그러면 the_date필터에 연결된 모든 콜백이 사용자 정의 출력에 추가됩니다. 또한 기본 date_format옵션 설정을 기본값 으로 사용하며이 옵션 도 사용 the_date()됩니다. 그리고는 피할 수 beforeafter정확히 같은, 다시 - 값을 the_date()기능.


1
카이저 감사합니다. 그것은 왜 때때로 날짜를 인쇄하지 못하는지를 설명합니다. 고마워
Robert hue

1
매우 포괄적 인 설명. 허용 된 답변보다 낫습니다.
Nilambar Sharma

1
@Nilambar 허용되는 답변은 tl; dr 버전이며 완벽하게 훌륭합니다 :)
kaiser

이 @kaiser 파고를위한 소품 - 나는 지금까지 그런 평범한 문제에 예상보다 더 많은 통찰력
serraosays

1
이 답변은 WP 문서 설명보다 낫습니다.
Ian

10

사용하지 않는 the_date()대신에 사용 the_time().

the_date는 날짜 만 반환하고 the_time은 날짜 + 시간을 반환합니다. the_date루프에서 사용될 때 워드 프레스가 둘 이상의 날짜를 반환하지 않는 이유를 모르겠습니다 . 그러나 가치가 동일하다는 사실과 관련이 있습니다. 값을 사용 the_time하면 동일하지 않으므로 항상 값을 반환합니다. 그래서 당신은 같은 것을 인쇄 할 수 있습니다<?php the_time('F j, Y'); ?>

코덱 의이 링크 는 the_date가 내가하는 것보다 훨씬 잘 작동하는 방법을 설명합니다.


1

무차별 대입

<?php the_time('F j, Y'); ?> - <?php the_time(); ?>

나를 위해 일했으며 같은 날짜인지 여부에 관계없이 각 게시물의 전체 날짜, 시간을 표시합니다.


0

일기가 작동하는 방식이기 때문에 한 번만 나타납니다. 상단에 날짜가 표시되고 아래에 항목을 작성합니다. 이 코드는 the_time을 사용하여 각 게시물의 날짜를 표시합니다.

<?php the_time(get_option('date_format')); ?>

자세한 내용은 여기에 대한 자습서를 작성했습니다. WordPress의 the_date () 함수가 첫 번째 게시물에서만 한 번만 나타나는 이유


자신의 제품 / 블로그를 홍보 하려면 소속을 공개해야합니다 . 그렇지 않으면 답변이 스팸으로 표시 될 수 있습니다. 읽어 보시기 바랍니다 스패머하지 않을 방법
DavidPostill
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.