Tại sao nó không hiển thị?
Khi bạn nhìn vào nguồn của the_date()
hàm, sau đó bạn sẽ thấy hai quả cầu:
global $currentday, $previousday;
Và sau đó có một quy tắc nếu có một ngày để hiển thị ... hay không. Kiểm tra tương tự như kiểm tra được thực hiện với is_new_day()
:
if ( $currentday != $previousday ) {
// show date
// Set global
$previousday = $currentday;
}
// else
return null;
Như bạn có thể thấy, $previousday
ngay lập tức được đặt thành $currentday;
. Vì vậy, nó được echo-ed một lần. Ngay sau đó, cả hai ngày đều giống nhau và kiểm tra sẽ thất bại. Đó là lý do tại sao bài đăng đầu tiên của bạn hiển thị nó, nhưng những người khác không hiển thị nó.
Tại sao nó hiển thị?
Nếu bạn tự hỏi tại sao nó lại hiển thị nhiều hơn một ngày, sau khi toàn cầu được xuất tinh, thì bạn sẽ phải xem quasetup_postdata()
. Hàm này được gọi bởi the_post();
và chịu trách nhiệm thiết lập mọi thứ cho một bài đăng trong vòng lặp.
if ( have_posts() )
{
while ( have_posts() )
{
the_post(); # <-- Calls setup_postdata( $post );
// your loop stuff here
}
}
Nội bộ của setup_postdata()
khá dễ hiểu (ít nhất là với những gì toàn cầu được thiết lập):
$currentday = mysql2date('d.m.y', $post->post_date, false);
$currentmonth = mysql2date('m', $post->post_date, false);
Vì vậy, phần chuyển động là $previousday
dựa vào đó $currentday
toàn cầu được thiết lập và kiểm tra. Và trừ khi có ngày mới , the_date()
sẽ không hiển thị bất cứ điều gì.
Chỉ cần đặt bài đăng của bạn thành những ngày hoàn toàn khác nhau và đột nhiên bạn sẽ thấy ngày xuất hiện trên mỗi bài đăng.
Ý tưởng đằng sau đó là gì?
Trên thực tế, ý tưởng này khá đơn giản và hiện tại kể từ v0.7.1 - ít nhất đây là những gì phpDocBlock nêu: Tại sao bạn muốn hiển thị ngày cho mỗi bài đăng trong kho lưu trữ? Một kho lưu trữ trông như thế này:
+--------------+
| 28.10.2014 |
+--------------+
| Post Title A |
| Post Title B |
+--------------+
| 29.10.2014 |
+--------------+
| Post Title C |
| Post Title D |
+--------------+
Bạn không đồng ý với điều đó? Chà, sau đó bạn chỉ đơn giản là sử dụng một chức năng được dự định là một cái gì đó hoàn toàn khác.
Tại sao làm get_the_date()
việc và làm thế nào để sử dụng nó đúng cách
Nó không bị ảnh hưởng bởi if / other trong the_date()
hàm (kiểm tra toàn cục). Nó cũng không có bộ lọc. Làm thế nào để khắc phục điều đó? Đơn giản:
echo apply_filters( 'the_date', get_the_date(), get_option( 'date_format' ), '', '' );
Điều này thêm bất kỳ cuộc gọi lại nào được gắn vào the_date
bộ lọc vào đầu ra tùy chỉnh của bạn. Nó cũng sử dụng date_format
cài đặt tùy chọn mặc định làm mặc định - cũng được sử dụng the_date()
. Và nó tránh bất kỳ before
và after
các giá trị - một lần nữa, chính xác như the_date()
hàm.