Проверка нахождения на дочерней странице определенной страницы
Я пытаюсь вывести логотип в зависимости от просматриваемой страницы.
<?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'?
Вы можете сделать это с помощью $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 }
Вы можете получить страницу поста / название поста, используя этот метод.
$parent = array_reverse(get_post_ancestors($post->ID));
$page_parent = get_post($parent[0]);
echo $page_parent->post_name;
Вы можете использовать условие в соответствии с вашими требованиями.
<?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 } ?>
Так же, как и в ответе Роберта Хью, это решение позволит вам получить 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;
Спасибо за быстрый ответ. Не могли бы вы уточнить, как мне реализовать это, используя или модифицируя мой текущий код?
user1752759
$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 {
// Это не дочерний элемент...
}
Рекомендуем предоставить дополнительную информацию в вашем ответе. Некоторая справочная информация и контекст будут полезны для следующих читателей. http://wordpress.stackexchange.com/help/how-to-answer
jdm2112