ลำดับชั้นของเทมเพลต: สับสนกับ index.php, front-page.php, home.php


36

ฉันสับสนจริงๆกับindex.php, และhome.php front-page.phpในหลายกรณีแม้ผมมีผมเขียนทับด้วยindex.php front-page.phpแต่เร็ว ๆ home.phpนี้ผมเริ่มตระหนักเกี่ยวกับ

  • ความแตกต่างระหว่างhome.phpและindex.phpคืออะไร
  • อะไรคือสภาพที่เหมาะสำหรับการใช้home.phpกว่าindex.php?
  • เงื่อนไขที่เหมาะสมที่สุดในการใช้front-page.phpคืออะไร
  • เมื่อฉันใช้งานfront-page.phpอะไรที่เฉพาะเจาะจงindex.phpสำหรับฉัน

ฉันได้อ่านลำดับชั้นของเทมเพลตใน Codex แล้ว โปรดอย่าผสมคำถามของฉันกับเทมเพลทของหน้าฉันเข้าใจ 'em, alHamduLILLAH


1
Got @rarst ด้วยนี้rarst.net/wordpress/front-page-logic อาจช่วยคุณ
Mayeenul Islam

คำตอบ:


34

ตรรกะหน้าแรกเป็นหนึ่งในคุณสมบัติที่สับสนที่สุดใน WordPress และยากที่จะอธิบายและสรุปได้เป็นพิเศษ ตามที่ระบุไว้ในความคิดเห็นในขณะที่กลับฉันเผาจำนวนไม่บริสุทธิ์เวลาในการรวบรวมตรรกะหน้าโกงแผ่นสำหรับมัน

แต่เนื่องจากนี่เป็นกระทู้ยอดนิยมให้ฉันพยายามตอบคำถามเฉพาะที่คุณมี

ความแตกต่างระหว่างhome.phpและindex.phpคืออะไร

home.phpเป็นเทมเพลตสำหรับดัชนีโพสต์ (ที่เก็บถาวรของชนิดโพสต์ดั้งเดิมซึ่งเป็นกรณีพิเศษใน WP) WP จะพยายามค้นหาดัชนีของโพสต์ไม่ว่าจะแสดงที่รูทของเว็บไซต์หรือที่หน้าโพสต์เฉพาะ

index.phpคือ catch - เทมเพลตทั้งหมด เป็นตัวเลือกสุดท้ายในลำดับชั้นของเทมเพลตทั้งหมดและจะถูกเลือกเมื่อไม่มีสิ่งใดเหมาะสมสำหรับทั้งมุมมองที่เก็บถาวรและมุมมองเอกพจน์

ดัชนีโพสต์เท่านั้นที่สามารถใช้home.phpแต่ทุกบริบทอื่น ๆ index.phpอาจและจะใช้

อะไรเป็นเงื่อนไขที่เหมาะที่จะใช้home.phpมากกว่าindex.php

คุณใช้home.phpกำหนดดัชนีโพสต์เอง

คุณใช้index.phpเพื่อให้แม่แบบทั่วไปมากที่สุดในชุดรูปแบบของคุณเหมาะสำหรับการแสดงอะไร

บางธีมเลือกที่จะว่างเปล่าindex.phpและให้แน่ใจว่ามีเทมเพลตเฉพาะสำหรับกรณีที่เป็นไปได้ทั้งหมดดังนั้นจึงไม่จำเป็นต้องใช้

เงื่อนไขที่เหมาะสมที่สุดในการใช้front-page.phpคืออะไร

front-page.php ใช้สำหรับดัชนีโพสต์ที่รูทหรือหน้าคงที่หากเปิดใช้งาน

เป็นเทมเพลตที่มีลำดับความสำคัญสูงดังนั้นหากธีมมีคุณไม่สามารถเลือกเทมเพลตเองสำหรับหน้าคงที่ได้ ด้วยเหตุนี้จึงแทบไม่เคยรวมอยู่ในธีมที่เผยแพร่สู่สาธารณะ (ซึ่งถูกต้อง)

การใช้งานที่ดีที่สุดสำหรับมันอยู่ในโครงการส่วนตัวเนื่องจากง่ายต่อการกำหนดค่ามากกว่าแม่แบบหน้า

เมื่อฉันใช้งานfront-page.phpอะไรที่เฉพาะเจาะจงindex.phpสำหรับฉัน

index.phpคือยังคงจับแม่แบบทั้งหมดสำหรับกรณีอื่น ๆ ทั้งหมด

ถ้าคุณใช้หน้าคงที่ (ซึ่งfront-page.phpจะนำไปใช้) แล้วหน้าโพสต์ของคุณจะพยายามที่จะใช้แล้วhome.phpindex.php


28

front-page.phpไฟล์เป็นเว็บไซต์หน้าแม่แบบ มันจะถูกนำมาใช้บนหน้าเว็บไซต์ของคุณไม่ว่าจะget_option( 'show_on_front' )มีการตั้งค่าหรือpageposts

home.phpแฟ้มแม่แบบเป็นบล็อกดัชนีโพสต์แม่แบบ มันจะถูกใช้เพื่อแสดงดัชนีโพสต์บล็อกของคุณเสมอไม่ว่าดัชนีโพสต์บล็อกจะปรากฏในหน้าแรกของเว็บไซต์หรือในหน้าอื่น

ในกรณีที่ทั้งสองfront-page.phpและhome.hppมีอยู่และget_option( 'show_on_front' )ตั้งค่าเป็นposts(เช่นหน้าเว็บไซต์แสดงดัชนีบล็อกโพสต์) front-page.phpไฟล์จะมีความสำคัญมากกว่าhome.phpไฟล์

index.phpไฟล์เป็นแม่แบบสำรองเริ่มต้นสำหรับทุกบริบทในแม่แบบลำดับชั้น มันจะถูกใช้เฉพาะในกรณีที่ไม่มีไฟล์เทมเพลตที่เฉพาะเจาะจงมากขึ้นสำหรับบริบทปัจจุบัน

ลำดับชั้นแม่แบบสำหรับหน้าแรกของเว็บไซต์คือ:

  • front-page.php
  • ถ้า'page' == get_option( 'show_on_front' ): ลำดับชั้นของหน้า
  • ถ้า'posts' == get_option( 'show_on_front' ): บล็อกลำดับชั้นดัชนีโพสต์

ลำดับชั้นของแม่แบบสำหรับดัชนีโพสต์บล็อกคือ:

  • home.php
  • index.php

ลำดับชั้นของเทมเพลตสำหรับหน้าคือ:

  • เทมเพลตหน้ากำหนดเอง
  • page-{slug}.php
  • page-{id}.php
  • page.php
  • index.php

ดังนั้นหากฉันได้รับสิทธิ์นี้คุณจะไม่สามารถใช้my-template-1เทมเพลตได้เมื่อตั้งค่าหน้าแรกเป็นโพสต์ล่าสุดและใช้my-template-2เมื่อตั้งค่าหน้าเป็นหน้าคงที่ (ไม่มีการเข้ารหัส) หรือไม่
Jack Johansson

18

ทั้งหมดนี้มาจากการอ่านอย่างละเอียดของแม่แบบลำดับชั้น

home.php ใช้ถ้า:

  • หน้าแรกของเว็บไซต์ของคุณถูกตั้งค่าให้แสดงรายการโพสต์หรือ
  • และชุดรูปแบบมีhome.phpไฟล์

หากเงื่อนไขสุดท้ายไม่ตรงกับ - นั่นคือไม่มีhome.phpไฟล์ในชุดรูปแบบ - จากนั้นindex.phpจะถูกโหลด

front-page.php จะถูกใช้ถ้า:

  • มีการตั้งค่าหน้าคงที่และ
  • ผู้เข้าชมไปที่หน้าที่คุณกำหนดไว้ว่า "หน้าแรกคงที่" (เช่น, http://example.com/), และ
  • ชุดรูปแบบมีfront-page.phpไฟล์

หากเงื่อนไขสุดท้ายไม่ตรงกับ - นั่นคือไม่มีfront-page.phpไฟล์ในชุดรูปแบบ - จากนั้นindex.phpจะถูกโหลด

สรุป

home.phpหากคุณต้องการที่จะปรับแต่งรายชื่อของโพสต์การใช้งาน หากคุณต้องการที่จะปรับแต่งหน้าแรกของคุณคงใช้
front-page.php


2
home.phpจะถูกใช้สำหรับดัชนีโพสต์บล็อกโดยไม่คำนึงถึงตำแหน่ง หากหน้าแรกถูกตั้งค่าให้แสดงดัชนีโพสต์บล็อกhome.phpจะใช้ (ถ้าfront-page.phpไม่มี)
Chip Bennett

10

ในระยะสั้น:

  • index.php เป็นแม่แบบทางเลือกเท่านั้นในกรณีที่ไม่พบแม่แบบที่เหมาะสม
  • home.php ใช้สำหรับบล็อก (รายการของโพสต์ล่าสุด)
  • front-page.php ใช้สำหรับหน้า Landing Page

index.phpแม่แบบสากล

index.phpแฟ้มแม่เป็นแม่แบบทางเลือก มันถูกใช้เป็นทางเลือกสุดท้ายเมื่อไม่มีเทมเพลตอื่นที่เหมาะสมอีกแล้ว ตัวอย่างเช่นถ้าคุณไม่ได้มีfront-page.phpหรือมิได้home.phpแล้วindex.phpจะนำมาใช้ สิ่งนี้ก็เป็นจริงเช่นกันหากขาดไปarchive.phpหรือsingle.phpอย่างอื่น

เกี่ยวกับfront-page.phpVShome.php

ตอนนี้ความแตกต่างระหว่างfront-page.phpและhome.phpเทมเพลตคือสิ่งที่front-page.phpใช้ตามชื่อแนะนำเป็นหน้าหลักของเว็บไซต์ในขณะที่home.phpตั้งใจให้เป็นบ้านของส่วนบล็อก

เทมเพลตใดที่จะใช้สำหรับหน้า Landing Page ของเว็บไซต์ของฉัน

front-page.phpแม่แบบถ้าปัจจุบันจะใช้สำหรับหน้าหลักของเว็บไซต์ (เช่นhttp://www.example.com/) หากไม่มีอยู่home.phpจะถูกใช้แทน หากทั้งไฟล์front-page.phpและhome.phpไฟล์เทมเพลตหายไปindex.phpเทมเพลตสำรองจะถูกใช้

เทมเพลตใดที่จะใช้สำหรับหน้าบล็อกของฉัน

WordPress ช่วยให้คุณมีหน้า "บล็อก" (ซึ่งจะแสดงรายการโพสต์ล่าสุด) บนหน้าอื่นนอกเหนือจากหน้า Landing Page (เช่นhttp://www.example.com/blog/) ดังนั้นหากเป็นกรณีนี้ในเว็บไซต์ของคุณหน้าบล็อกจะใช้home.phpเทมเพลตเสมอ หากhome.phpไม่มีอยู่ระบบindex.phpจะใช้เทมเพลตสำรอง

จะกำหนดค่าหน้า Landing Page และหน้าบล็อกได้อย่างไร

ในการกำหนดค่าเนื้อหาที่จะแสดงในหน้าแรกของคุณไปที่WordPress Adminภายใต้เครื่องมือ> การอ่านคุณสามารถกำหนดค่า " หน้าแสดงหน้า " เพื่อแสดงหน้าคงที่หรือโพสต์ล่าสุดของคุณ

ในกรณีที่คุณเลือกที่จะแสดงหน้าแบบคงที่ในหน้าแรกคุณสามารถกำหนดได้ว่าจะใช้หน้าใดเป็นตัวยึดสำหรับหน้าบล็อก (ซึ่งจะใช้home.phpเทมเพลต):

ป้อนคำอธิบายรูปภาพที่นี่


3

นำมาจากลำดับชั้นของแม่แบบ Wordpress

แสดงหน้าแรก

ตามค่าเริ่มต้น WordPress จะตั้งค่าหน้าแรกของเว็บไซต์ของคุณเพื่อแสดงโพสต์บล็อกล่าสุดของคุณ หน้านี้เรียกว่าดัชนีโพสต์บล็อก คุณยังสามารถตั้งค่าการโพสต์บล็อกของคุณเพื่อแสดงบนหน้าคงที่แยกต่างหาก เทมเพลตไฟล์ home.php ใช้ในการสร้างดัชนีบล็อกโพสต์ไม่ว่าจะใช้เป็นหน้าแรกหรือหน้าคงที่แยกกัน หาก home.php ไม่มีอยู่ WordPress จะใช้ index.php

  1. home.php
  2. index.php

หมายเหตุ: หาก front-page.php มีอยู่ก็จะแทนที่แม่แบบ home.php

หน้าจอแสดงผล

ไฟล์เทมเพลต front-page.php ใช้เพื่อแสดงหน้าแรกของเว็บไซต์ของคุณไม่ว่าจะเป็นหน้าแรกจะแสดงดัชนีบล็อกโพสต์ (ดังกล่าวข้างต้น) หรือหน้าคงที่ เทมเพลตหน้าแรกมีความสำคัญเหนือกว่าแม่แบบบล็อกโพสต์ดัชนี (home.php) หากไฟล์ front-page.php ไม่มีอยู่ WordPress จะใช้ไฟล์ home.php หรือ page.php ขึ้นอยู่กับการตั้งค่าในการตั้งค่า→การอ่าน หากไม่มีไฟล์เหล่านั้นอยู่ก็จะใช้ไฟล์ index.php

1. front-page.php - ใช้สำหรับทั้ง“ โพสต์ล่าสุดของคุณ” หรือ“ หน้าคงที่” ตามที่ตั้งไว้ในหน้าแรกจะแสดงส่วนของการตั้งค่า→การอ่าน

2. home.php - หาก WordPress ไม่พบ front-page.php และ“ โพสต์ล่าสุดของคุณ” ถูกตั้งค่าในหน้าแรกจะแสดงส่วนมันจะค้นหา home.php นอกจากนี้ WordPress จะค้นหาไฟล์นี้เมื่อตั้งค่าหน้าโพสต์ในส่วนหน้าแสดงผล

3. page.php - เมื่อตั้งค่า“ front page” ในหน้าแรกจะแสดงส่วน

4. index.php - เมื่อ“ โพสต์ล่าสุดของคุณ” ถูกตั้งค่าในหน้าแรกจะแสดงหัวข้อ แต่ home.php ไม่มีอยู่หรือเมื่อตั้งค่าหน้าแรก แต่ไม่มี page.php อยู่

อย่างที่คุณเห็นมีกฎมากมายที่พา ธ ของ WordPress ใช้ การใช้แผนภูมิด้านบนเป็นวิธีที่ดีที่สุดในการพิจารณาว่า WordPress จะแสดงผลอย่างไร

แผนภูมิลำดับชั้นของแม่แบบ: ลำดับชั้นของแม่แบบ Wordpress


2

ฉันตัดสินใจทดสอบเทมเพลตที่ใช้สำหรับแต่ละหน้าต่อไปนี้เมื่อตั้งค่าตัวเลือกการแสดงหน้าด้านหน้า

  • example.net
  • example.net/home/
  • example.net/blog/

ผลลัพธ์ค่อนข้างยาว แต่สามารถใช้เป็นข้อมูลอ้างอิงหรือสูตรโกงได้

หน้าแรกแสดงขึ้น

ที่มา: แม่แบบ front-page.php และ home.php แตกต่างกันอย่างไรใน WordPress

หมายเหตุถึงบรรณาธิการ:ฉันพยายามคัดลอกและวางตารางที่นี่ แต่ต้องใช้รูปแบบ markdown แทน HTML โปรดแปลงเป็น markdown ถ้าคุณทำได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.