ตรวจสอบว่าเป็นหน้าหลักถ้ามีเด็ก ๆ ถ้ามีลูกหลาน


10

ฉันมีเทมเพลตหน้าเริ่มต้นหนึ่งที่ฉันต้องการใช้กับสองสถานการณ์ ฉันต้องการใช้เทมเพลตหน้าเดียวเท่านั้นเพื่อความเรียบง่ายสำหรับลูกค้าของฉัน

นี่คือสิ่งที่ฉันพยายามทำ:

if parent_page OR if child-page without children {
  display full-width-layout
}
if child page with children or if grandchild page {
  display sidebar-menu-layout
}

เป็นไปได้ไหม

นี่คือสิ่งที่ฉันได้ลองมาแล้ว:

if( is_page() && $post->post_parent > 0 ) {
  //display sidebar-menu-layout
} else {
  //display full-width-layout
}

มันทำงานได้ดีเท่ากับเพจระดับบนสุดมันจะแสดงเลย์เอาต์แบบเต็มความกว้าง แต่ฉันจะทำอะไรได้บ้างเพื่อให้แน่ใจว่าแถบด้านข้าง - เมนู - เลย์เอาต์แสดงบนหน้าย่อยที่มีลูก ๆ และหน้าใหญ่เท่านั้น และสำหรับเพจย่อยที่ไม่มีลูกให้แสดงเลย์เอาต์แบบเต็มความกว้าง

ขอบคุณล่วงหน้า. ฉันแน่ใจว่ามันมีทางออกที่ง่ายฉันเพิ่งจะค่อนข้างใหม่กับ WP ดังนั้นยังคงพยายามที่จะคิดออกว่าสามารถและไม่สามารถทำได้

คำตอบ:


7

ก่อนที่จะอ่านวิธีแก้ปัญหาที่ Bravokeyl จัดหาให้ฉันในที่สุดด้วยการลองผิดลองถูกหาวิธีที่เหมาะกับฉัน ฉันไม่แน่ใจว่าอันไหนดีกว่าของสองคนนี้หรือถูกต้องที่สุดฉันรู้แค่ว่าฉันทำงานได้ดีสำหรับปัญหาที่ฉันมี

นี่คือรหัสที่ฉันใช้เพื่อแสดงเค้าโครงเต็มความกว้างหรือเค้าโครงเมนูด้านข้าง:

if( is_page() && $post->post_parent > 0 ) { 
  // post has parents

  $children = get_pages('child_of='.$post->ID);
  if( count( $children ) != 0 ) {
    // display sidebar-menu layout
  }

  $parent = get_post_ancestors($post->ID);
  if( count( $children ) <= 0  && empty($parent[1]) ) {
    // display full-width layout
  } elseif ( count( $children ) <= 0  && !empty($parent[1]) )  {
    // display sidebar-menu layout
  }

} else {
  // post has no parents
  // display full-width layout
}

4
Level-0
--Level-1
----Level-2
------Level-3
----Levelanother-2
--Levelanother-1

ตรวจสอบว่าหน้านั้นเป็นหน้าระดับบนสุด (อาจมีลูกหรือไม่)?

$post->$post_parent == 0หรือเป็นget_post_ancestors( $post )ค่าว่างจะส่งคืนเฉพาะเพจระดับ 0

เป็นเพจย่อยและเป็นเพจระดับ 1 หรือ Levelanother-1 เท่านั้นหรือไม่

$post->$post_parent > 0หรือไม่ว่างเปล่าget_post_ancestors( $post )และว่างเปล่าget_post_ancestors( $post->post_parent )

หน้าระดับ 1 แต่ไม่มีเด็ก ๆ ชอบหน้าเลเวลอื่น ๆ หรือไม่

$post->$post_parent > 0หรือไม่ว่างเปล่า get_post_ancestors( $post )และว่างเปล่าget_post_ancestors( $post->post_parent ) และcount(get_children( $post ->ID, 'ARRAY_A' )) == 0..

ฉันยังไม่ได้ตรวจสอบเรื่องนี้ แต่มันควรจะทำงานได้ดี คุณยังสามารถเล่นกับ get_page_children () และget_posts ()


ขอบคุณ bravokeyl ทางออกนั้นใช้ได้สำหรับฉัน หลังจากลองผิดลองถูกหลายครั้ง (ข้อผิดพลาดส่วนใหญ่) ฉันพบวิธีแก้ปัญหาของฉันเองก่อนหน้านี้วันนี้ก่อนที่ฉันจะอ่านคำตอบของคุณ ฉันจะโพสต์ที่ด้านล่าง
laura.f

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