Проверка нахождения на дочерней странице определенной страницы

24 нояб. 2014 г., 04:59:44
Просмотры: 39K
Голосов: 16

Я пытаюсь вывести логотип в зависимости от просматриваемой страницы.

<?php if ( is_page('home') || is_page('services') ) { ?>
    <div class="col-md-2 col-sm-4">
        <?php ci_e_logo('<h1 class="logo ' . get_logo_class() . '">', '</h1>'); ?>
    </div>
<?php } 
else { ?>
    <div class="col-md-2 col-sm-4">
        <h1 class="logo imglogo">
            <a href="http://websiteaddress.com">
                <img src="<?php echo get_bloginfo('template_directory');?>/images/picturehere.png" alt="заголовок здесь"></a>
            </h1>
    </div>
<?php } ?>

Приведенный выше код работает нормально, но как применить смену логотипа на подстраницах страницы 'services'?

0
Все ответы на вопрос 7
1
16

Вы можете сделать это с помощью $post->post_parent. Вам нужно будет проверить, является ли родитель дочерней страницы страницей "Услуги". Вот как это можно проверить.

В следующем коде я предположил, что 123 — это ID вашей страницы услуг. Замените его на реальный ID.

if ( 123 == $post->post_parent ) { ?>
    <div class="col-md-2 col-sm-4">
        <?php ci_e_logo('<h1 class="logo ' . get_logo_class() . '">', '</h1>'); ?>
    </div>
<?php }
24 нояб. 2014 г. 07:02:47
Комментарии

Просто замечу, что это не сработает для дочерних элементов (например, для страниц, находящихся на два уровня ниже), хотя, на мой взгляд, это всё равно лучше выбранного ответа.

Nathan Nathan
25 мая 2017 г. 22:21:48
1

Вы можете получить страницу поста / название поста, используя этот метод.

$parent = array_reverse(get_post_ancestors($post->ID));
$page_parent = get_post($parent[0]);
echo $page_parent->post_name;

Вы можете использовать условие в соответствии с вашими требованиями.

24 нояб. 2014 г. 07:16:08
Комментарии

Пожалуйста, отформатируйте свой код правильно перед публикацией.

Robert hue Robert hue
24 нояб. 2014 г. 07:18:39
0
<?php 
global $post;

// Проверяем, является ли текущая страница главной или страницей услуг
if ( is_page('home') || is_page('services') ) { ?>
    <div class="col-md-2 col-sm-4">
        <?php ci_e_logo('<h1 class="logo ' . get_logo_class() . '">', '</h1>'); ?>
    </div>
<?php } 

// Проверяем URL на соответствие шаблону страницы услуги
elseif ( preg_match( '#^service(/.+)?$#', $wp->request ) ) { ?>
    <div class="col-md-2 col-sm-4">
        <?php ci_e_logo('<h1 class="logo ' . get_logo_class() . '">', '</h1>'); ?>
    </div>
<?php
}

// Для всех остальных случаев выводим логотип с изображением
else { ?>
    <div class="col-md-2 col-sm-4">
        <h1 class="logo imglogo">
            <a href="<?php echo esc_url( home_url( '/' ) ); ?>">
                <img src="<?php echo get_bloginfo('template_directory');?>/images/picturehere.png" alt="Логотип компании" title="Логотип компании"></a>
            </h1>
    </div>
<?php } ?>
27 нояб. 2014 г. 15:12:44
0

Так же, как и в ответе Роберта Хью, это решение позволит вам получить ID родительского элемента:

echo get_post_field( 'post_parent' );

Второй параметр является необязательным и может содержать ID (для случаев, когда вы находитесь вне цикла или хотите запросить родителя определенного элемента)

$post_ID = 666;
echo get_post_field( 'post_parent', $post_ID );

Эта функция позволяет получить любое поле из таблицы постов, например, slug записи, статус, тип... см. документацию для всех доступных полей.

В вашем случае функция будет выглядеть так:

if ( get_post_field( 'post_parent' ) === 9 ) :
    //дочерний элемент страницы с ID 9
endif;
7 апр. 2017 г. 12:10:01
0

Попробуйте это

if ( wp_get_post_parent_id( get_the_ID() ) != 0 ) {
    echo 'Я дочерняя страница';
    // ваш код
}
30 мая 2021 г. 01:16:11
2

Используйте get_post_ancestors($post). Эта функция вернет массив, если текущий отображаемый пост является дочерним для родительской страницы.

24 нояб. 2014 г. 05:12:11
Комментарии

Спасибо за быстрый ответ. Не могли бы вы уточнить, как мне реализовать это, используя или модифицируя мой текущий код?

user1752759 user1752759
24 нояб. 2014 г. 05:15:28

Я не думаю, что это решит проблему, так как функция get_post_ancestors() возвращает только массив дочерних страниц. Она подходит для проверки, есть ли у страницы дочерние страницы.

Robert hue Robert hue
24 нояб. 2014 г. 07:18:06
1

$post_current = get_post();

$args = array(
        'post_parent' => $parent_id, // ID родителя
        'posts_per_page' => -1,
        'post_type' => 'page',

);
$children = get_posts($args);

$is_child = false;

foreach ($children as $f) {
    if ( $f->ID == $post_current->post_parent ) {
        // это дочерний элемент 
        $is_child = true;
        break;
    }
}

if ($is_child) {
    // Это дочерний элемент...
} else {
    // Это не дочерний элемент...
}

17 нояб. 2016 г. 16:31:25
Комментарии

Рекомендуем предоставить дополнительную информацию в вашем ответе. Некоторая справочная информация и контекст будут полезны для следующих читателей. http://wordpress.stackexchange.com/help/how-to-answer

jdm2112 jdm2112
17 нояб. 2016 г. 16:47:28