Функция, подобная page(), но возвращает значение true, если на любой подстранице данной страницы
В своем заголовке я использую этот код:
if(is_page("stores")) {
// Do something
}
Я запускаю некоторый код, если на странице stores
, но то, что я хочу сделать, это запустить этот код, если страница stores
или любая страница, которая является подстраницей магазинов. Не только это, но и рекурсивно, поэтому, если мы находимся на подстранице stores
, код все еще выполняется.
3 answers
При использовании довольно постоянных ссылок я просто сверяюсь с запросом;
if ( preg_match( '#^stores(/.+)?$#', $wp->request ) ) {
// away we go!
}
Никаких дополнительных запросов к БД, мало вычислений и работает прямо по дереву!
Тестирование для подстраниц раздела статьи условных тегов в Кодексе содержит пример подходящего кода, который использует get_post_ancestors()
чтобы получить родительское дерево и пройти по нему с проверкой.
Удобная маленькая функция
function is_child_of($parent) {
global $post;
if ( $post->post_parent == $parent){
return true
}else{
$curent_parent = $post->post_parent;
$dec = false;
while ($curent_parent > 0){
$p = get_post($curent_parent);
$curent_parent = $p->post_parent;
if ($curent_parent > 0){
if ($curent_parent == $parent){
return true;
}
}
}
return false;
}
Использование: проверьте, является ли current дочерним элементом страницы с идентификатором 22
if (is_child_of(22)){
//its a child of 22
}