왜 표시되지 않습니까?
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()
됩니다. 그리고는 피할 수 before
와 after
정확히 같은, 다시 - 값을 the_date()
기능.