Wordpress php: способ проверить, являются ли страницы дочерними по отношению к родительской странице? - PullRequest
2 голосов
/ 21 мая 2009

Работа над моим первым сайтом Wordpress, так что я уверен, что это действительно простой вопрос. Я пытаюсь написать условный оператор php, который выполняет определенное действие, когда страница является дочерней по отношению к родительской странице.

Например, вместо того, чтобы просто указать одну страницу, как показано ниже, я бы хотел указать все страницы, у которых страница «О нас» является родительской:

<?php if (is_page('About Us')) echo 'Hello World!'; ?>

Я попробовал функцию "child_of", но она не была такой простой, как я надеялся.

Когда я использую приведенное ниже, я получаю синтаксическую ошибку - возможно, просто я не знаю, как использовать функцию:

<?php if (child_of('About Us')) echo 'Hello World!'; ?>

Есть предложения?

Ответы [ 5 ]

3 голосов
/ 21 мая 2009

Вы получаете сообщение об ошибке, потому что в WordPress нет функции child_of().

child_of() - это способ поиска с использованием функции get_pages ().

$pages = get_pages('child_of=##');

где ## - числовой идентификатор (а не имя) страницы "О нас".

2 голосов
/ 06 июня 2010

Добавьте следующую функцию в файл темы functions.php :

function is_tree($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
};

Тогда вы можете использовать следующее:

if(is_tree('2')){ // 2 being the parent page id
   // Do something if the parent page of the current page has the id of two
}

Ссылка: http://codex.wordpress.org/Conditional_Tags

1 голос
/ 11 декабря 2013

Простое решение, где вы хотите сделать ссылку на родительскую страницу с дочерней страницы; $ post-> post_parent содержит идентификатор родителя страницы, если он есть, или ноль, если его нет:

<?php
if($post->post_parent !== 0){               
    print '<a href="'.get_permalink($post->post_parent).'">&larr; Back</a>';    
}
?>

так что в этом случае вы бы хотели изменить if (), чтобы проверить, если $ post-> post_parent == $ id_of_about_page.

0 голосов
/ 07 февраля 2013

Этот код решил проблему для меня, ребята, если кто-то интересуется предупреждением:

<?php
    global $post;
    if ($post->post_parent == 9) {

        echo 'blah blah';

}; ?>

«9» - это идентификатор родительской страницы.

0 голосов
/ 21 мая 2009

Это последний код, который сработал для меня - не уверен, что это правильный способ сделать то, что я пытаюсь сделать, но буду публиковать в интересах тех, у кого мой вопрос.

У меня есть набор правых столбцов, каждый из которых относится к разделу сайта (каждая родительская страница представляет раздел сайта).

Я хочу, чтобы родительская страница и все дочерние страницы этого родителя вытягивали один и тот же конкретный правый столбец.

Вот что я сделал:

<?php 

if (is_page('Page Name 1') || $post->post_parent == '##') {
include (TEMPLATEPATH . '/right-1.php');

} elseif (is_page('Page Name 2') || $post->post_parent == '##') {
include (TEMPLATEPATH . '/right-2.php');

} elseif (is_page('Page Name 3') || $post->post_parent == '##') {
include (TEMPLATEPATH . '/right-3.php');

} elseif (is_page('Page Name 4') || $post->post_parent == '##')
include (TEMPLATEPATH . '/right-4.php');

?>

Где ## представляет ID # страницы.

...