Функция, подобная page(), но возвращает значение true, если на любой подстранице данной страницы


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

if(is_page("stores")) {
    // Do something
}

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

Author: Scott, 2011-06-11

3 answers

При использовании довольно постоянных ссылок я просто сверяюсь с запросом;

if ( preg_match( '#^stores(/.+)?$#', $wp->request ) ) {
    // away we go!
} 

Никаких дополнительных запросов к БД, мало вычислений и работает прямо по дереву!

 4
Author: TheDeadMedic, 2011-06-24 01:01:28

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

 4
Author: Rarst, 2011-06-11 13:33:32

Удобная маленькая функция

 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
}
 4
Author: Bainternet, 2011-06-11 16:27:34