2012-12-17 37 views
17

Có thể kiểm tra xem trang có phải là trang gốc hay trang đó là trang con không?Kiểm tra xem trang có phải là trang gốc hay trang đó là trang con không?

tôi đã trang của tôi thành lập như thế này:

- Chánh

---- trang trẻ em 1

---- trang trẻ em 2

, vv

Tôi muốn hiển thị một menu nhất định nếu đó là trang gốc và menu khác nếu nó nằm trên trang con.

Tôi biết tôi có thể làm điều gì đó như dưới đây nhưng tôi muốn làm cho nó năng động hơn một chút mà không bao gồm cả ID trang cụ thể.

<?php 
if ($post->post_parent == '100') { // if current page is child of page with page ID 100 
    // show image X 
} 
?> 
+0

Bạn muốn xác định 'cha' sau đó như thế nào? – Alex

+0

@alexjamesbrown Có cách nào để làm một cái gì đó như 'is_parent' /' is_child'? – Rob

+0

Bạn gọi cho phụ huynh là gì? Bạn có bao gồm() đứa trẻ trong cha mẹ không? Hay bạn có bất kỳ loại quan hệ nào khác? Nó chỉ là một cấu trúc thư mục? – cheesemacfly

Trả lời

39

Bạn có thể kiểm tra xem các bài là một trang con như thế này:
* (từ http://codex.wordpress.org/Conditional_Tags) *

<?php 

global $post;  // if outside the loop 

if (is_page() && $post->post_parent) { 
    // This is a subpage 

} else { 
    // This is not a subpage 
} 
?> 
+3

Tại sao tính năng này hoạt động - '$ post-> post_parent' chứa số nguyên với ID bài đăng gốc (mặc định 0) - giá trị mặc định có nghĩa là không có gốc. '0' trong điều kiện được đánh giá là ** FALSE **, các số khác (> 0) được đánh giá là ** TRUE **. –

3

Đặt chức năng này trong file functions.php của theme của bạn.

function is_page_child($pid) {// $pid = The ID of the page we're looking for pages underneath 
    global $post;   // load details about this page 
    $anc = get_post_ancestors($post->ID); 
    foreach($anc as $ancestor) { 
     if(is_page() && $ancestor == $pid) { 
      return true; 
     } 
    } 
    if(is_page()&&(is_page($pid))) 
    return true; // we're at the page or at a sub page 
    else 
     return false; // we're elsewhere 
}; 

Sau đó, bạn có thể sử dụng nó:

<?php 
    if(is_page_child(100)) { 
     // show image X 
    } 
?> 
+0

với việc sử dụng "get_post_ancestors", bạn có thể kiểm tra ngay cả các trang con lớn cho các post-id cấp 1 - điều này đã giúp tôi tạo các lớp học cơ thể và có các màu css khác nhau cho các bậc cha mẹ/cha mẹ cấp 1 khác nhau! –

+0

'' ' chức năng themeName_body_class ($ classes) { $ classNames = array(); $ post = get_post(); $ parent = get_post_ancestors ($ post); $ cha mẹ [] = $ post-> ID; if (!trống ($ cha mẹ)) { foreach ($ parentID $ parentID) { if ($ parentID === 8) { $ classNames [] = 'my-special-className'; } nếu ($ parentID === 11) { $ classNames [] = 'my-other-special-className'; } } } // echo var_dump ($ classes); trả về mảng_merge ($ classes, $ classNames); } add_filter ('body_class', 'themeName_body_class'); '' ' –

2

Tôi biết đây là một câu hỏi cũ nhưng tôi đang tìm kiếm câu hỏi này giống nhau và không thể tìm thấy một câu trả lời rõ ràng và đơn giản cho đến khi tôi đã đưa ra cái này. Câu trả lời của tôi không trả lời lời giải thích của anh ấy nhưng nó trả lời câu hỏi chính mà tôi đang tìm kiếm.

Điều này kiểm tra xem trang là con hay cha mẹ và cho phép bạn hiển thị, ví dụ menu thanh bên, chỉ trên các trang có trẻ em hoặc cha mẹ chứ không phải trên trang không có cha mẹ hoặc con .

<?php 
    global $post;  
    $children = get_pages(array('child_of' => $post->ID)); 
    if (is_page() && ($post->post_parent || count($children) > 0 )) : 
?> 
Các vấn đề liên quan