Какие изменения необходимы для того, чтобы этот условный код работал на более глубоких уровнях?

Я использую условный код, чтобы применить выделение css к пункту меню просматриваемой страницы.

<li<?php if ( is_page('channels') || '2704' == $post->post_parent ) { echo " class=\"current\""; } // the page is 'channels', or the parent of the page is 'channels'?>><a href="/programs/channels/">Channels</a></li>

Мне нужно также применить его ко всем страницам ниже этого родителя.

похоже, что вы были близки. Можете ли вы попытаться отменить свою родительскую инструкцию?

 '2704' == $post->post_parent 

должно быть

  ($post->post_parent == '2704') 

Заметьте, я тоже в скобках.

поэтому ваш код будет:

  <li<?php if ( is_page('channels') || ($post->post_parent == '2704') ) { echo " class=\"current\""; } // the page is 'channels', or the parent of the page is 'channels'?>> <a href="/programs/channels/">Channels</a> </li> 

Отвечая на мой вопрос …

Использование is_tree, похоже, работает.

Добавьте это в функции:

 function is_tree($pid) { global $post; $ancestors = get_post_ancestors($post->$pid); $root = count($ancestors) - 1; $parent = $ancestors[$root]; if(is_page() && (is_page($pid) || $post->post_parent == $pid || in_array($pid, $ancestors))) { return true; } else { return false; } }; 

Использование:

 if (is_tree(POST ID HERE)) { // 'POST ID HERE' is the post ID. // do stuff } 

Я видел варианты is_tree, но я недостаточно умен, чтобы узнать, лучше ли кто-то другой.