Một kiểm tra nếu là trang cha mẹ, nếu có con, nếu có cháu


10

Tôi có một mẫu trang mặc định mà tôi muốn sử dụng cho hai tình huống. Tôi chỉ muốn sử dụng một mẫu trang vì mục đích đơn giản cho khách hàng của tôi.

Đây là những gì tôi đang cố gắng thực hiện:

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
}

Điều này có thể không?

Đây là những gì tôi đã cố gắng cho đến nay:

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

Nó hoạt động cho đến khi trên các trang cấp cao nhất, nó hiển thị bố cục toàn chiều rộng. Nhưng, tôi có thể làm gì để đảm bảo rằng bố cục menu bên được hiển thị trên các trang con có trẻ em và chỉ trên các trang lớn? Và đối với các trang con không có con, để hiển thị bố cục toàn chiều rộng.

Cảm ơn trước. Tôi chắc chắn rằng nó có một giải pháp đơn giản, tôi chỉ còn khá mới đối với WP nên vẫn cố gắng tìm ra những gì có thể và không thể thực hiện được.

Câu trả lời:


7

Trước khi đọc giải pháp Bravokeyl cung cấp, cuối cùng tôi đã thông qua thử và sai, đã đưa ra một giải pháp hiệu quả cho tôi. Tôi không chắc cái nào tốt hơn trong hai cái, hay đúng nhất, tôi chỉ biết rằng cái của tôi làm việc cho tôi, cho vấn đề tôi gặp phải.

Đây là mã tôi đã sử dụng để hiển thị bố cục toàn chiều rộng hoặc bố cục menu thanh bên:

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

kiểm tra xem trang có phải là trang cấp cao nhất không (có thể có con hay không)?

$post->$post_parent == 0hoặc trống get_post_ancestors( $post )chỉ trả về Trang cấp 0.

Là một trang con và chỉ là trang Cấp 1 hay Cấp độ-1?

$post->$post_parent > 0hoặc không trống get_post_ancestors( $post )rỗngget_post_ancestors( $post->post_parent )

Là trang cấp 1 nhưng không có con như trang Levelanother-1?

$post->$post_parent > 0hoặc không trống rỗng get_post_ancestors( $post )và trống rỗng get_post_ancestors( $post->post_parent )count(get_children( $post ->ID, 'ARRAY_A' )) == 0..

Tôi chưa kiểm tra cái này..nhưng nó sẽ hoạt động tốt. Bạn cũng có thể chơi với get_page_children () và get_posts ()


Cảm ơn bạn bravokeyl. Giải pháp đó đã làm việc cho tôi. Sau rất nhiều thử nghiệm và lỗi (chủ yếu là lỗi) tôi đã đưa ra một giải pháp của riêng tôi vào đầu ngày hôm nay trước khi tôi đọc câu trả lời của bạn. Tôi sẽ đăng nó dưới đây.
laura.f

Tuyệt quá! bạn đã tìm ra giải pháp.
bravokeyl
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.