Widget Logic(worpdress)中的条件功能有问题。 我想在子页面上显示菜单,并设置所有子项。
我用这个:
global $post; return (in_array(1959,get_post_ancestors($post)));
在这种情况下,它适用于所有孩子但在子页面上没有显示(1959)。
我也试着:
global $post; return (is_page('Offer') || ($post->post_parent=="1959"));
在这种情况下,它不会显示在更深的孩子身上。
答案 0 :(得分:1)
我发现您已经找到了问题的解决方案,但我想详细说明原始尝试无法解决的原因以及如何改进代码。
您的第一个代码段将检索所提供的页面(帖子对象)的所有祖先页面。如果这些祖先中的任何一个与您定义的页面ID匹配,则它将返回true。目前的页面未经过测试,因此,如果您在页面上进行检查,则仍会返回错误。
在第二次尝试中,您要检查post_parent
属性,该属性仅向您提供直接父ID。任何更高级别的页面都不包括在内。
我的解决方案是:
global $post;
$page_id = 1959; // the page ID you want to test against.
return ( is_page( $page_id ) || in_array( $page_id, get_post_ancestors( $post ) ) );
我首先检查is_page()
以避免运行更密集的get_post_ancestors()
功能。我还使用了一个变量作为页面ID,这个变量被传递到两个测试中,避免了混淆。
您可以将代码转换为函数以使其可重用。
function wpse_is_page_or_subpage( $page_id ) {
global $post;
return ( is_page( $page_id ) || in_array( $page_id, get_post_ancestors( $post ) ) );
}
用法:wpse_is_page_or_subpage( 1959 );
答案 1 :(得分:0)
我通过这个方式重新获得了它:
global $post; return (in_array(1959,get_post_ancestors($post))) || (is_page('Offer'));