Показать содержимое, если родительская страница имеет дочерние страницы

22 нояб. 2012 г., 15:16:25
Просмотры: 23.4K
Голосов: 3

Используя этот фрагмент кода, вы можете показывать содержимое в зависимости от того, является ли страница дочерней или нет:

<?php
global $post;

if ( is_page() && $post->post_parent ) : ?>
Это дочерняя страница.

<?php else : ?>
Это родительская страница.

<?php endif; ?>

Но я хотел бы добавить еще одно условие, чтобы можно было иметь разное содержимое для родительской страницы, которая имеет дочерние страницы, и родительской страницы, которая их не имеет. Будет ли работать что-то подобное? Если да, что должно быть вместо "XXX"?

<?php
global $post;

if ( is_page() && $post->post_parent ) : ?>
Это дочерняя страница.

<?php elseif ( is_page() && XXX ) : ?>
Это родительская страница (с одной или несколькими дочерними страницами)

<?php else : ?>
Это родительская страница без дочерних страниц.

<?php endif; ?>

Заранее спасибо!

0
Все ответы на вопрос 3
0

В итоге я использовал этот код:

<?php
global $post;
$children = get_pages( array( 'child_of' => $post->ID ) );

if ( is_page() && $post->post_parent ) : ?>
Это дочерняя страница.

<?php elseif ( is_page() && count( $children ) > 0 ) : ?>
Это родительская страница (с одной или несколькими дочерними)

<?php else : ?>
Это родительская страница без дочерних.

<?php endif; ?>
22 нояб. 2012 г. 18:54:53
3

Вы также можете создать собственный условный тег. В файл functions.php добавьте:

function my_is_parent() {
    global $post;

    $children = get_pages('child_of='.$post->ID);
    if( count( $children ) > 0 ) {
        $parent = true;
    }

    return $parent;
}

И в вашем условии IF вместо XXX используйте: my_is_parent()

Конечно, вы можете назвать функцию как-то иначе, а не "my_is_parent", если хотите. Хотя не уверен в этом моменте, но предполагаю, что использование "is_parent" не совсем надежно, если эта функция когда-нибудь войдет в ядро WordPress.

22 нояб. 2012 г. 15:55:23
Комментарии

Разве это не должно возвращать $parent = true, булево значение, а не текст?

Trevor Trevor
8 сент. 2015 г. 04:51:07

@Trevor да, ты прав. Хотя это работает и с текстовым значением, но я обновил этот 3-летний ответ сейчас :)

jzatt jzatt
8 сент. 2015 г. 11:04:49

Ответ всё ещё актуален спустя 7 лет.

Clarus Dignus Clarus Dignus
14 апр. 2019 г. 16:21:53
2

этого можно добиться, используя

global $post;

$args = array (
    'parent' => $post->ID
);

$children = get_pages( $args );

if ( is_page() && $post->post_parent ) : ?>
Это дочерняя страница.

<?php elseif ( is_page() && count( $children ) > 0 ) : ?>
Это родительская страница (с одной или несколькими дочерними)

<?php else : ?>
Это родительская страница без дочерних.

<?php endif; ?>

и используя count( $children ) > 0 вместо вашего XXX

22 нояб. 2012 г. 15:33:41
Комментарии

Можешь показать полный код? Спасибо!

nicolas nicolas
22 нояб. 2012 г. 16:01:49

Привет @nicolas, добавил для тебя полный код.

fischi fischi
22 нояб. 2012 г. 18:17:10