ทำไมมันไม่แสดง?
เมื่อคุณดูที่แหล่งที่มาของ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
}
}
internals ของsetup_postdata()
นั้นค่อนข้างง่ายที่จะเข้าใจ (อย่างน้อยกับสิ่งที่ globals ได้รับการตั้งค่า):
$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()
ทำงานและวิธีใช้อย่างถูกวิธี
มันจะไม่ได้รับผลกระทบจาก if / else ในthe_date()
ฟังก์ชั่น (การตรวจสอบกลม) นอกจากนี้ยังไม่ได้มีตัวกรอง จะแก้ไขได้อย่างไร? ง่าย:
echo apply_filters( 'the_date', get_the_date(), get_option( 'date_format' ), '', '' );
สิ่งนี้จะเพิ่มการเรียกกลับที่แนบมากับthe_date
ตัวกรองไปยังเอาต์พุตที่คุณกำหนดเอง นอกจากนี้ยังใช้การdate_format
ตั้งค่าตัวเลือกเริ่มต้นเป็นค่าเริ่มต้น - ซึ่งถูกใช้โดยthe_date()
เช่นกัน และจะหลีกเลี่ยงค่าใด ๆbefore
และafter
- อีกครั้งเหมือนกับthe_date()
ฟังก์ชั่น