小部件逻辑 - 显示在页面和所有孩子

时间:2017-02-13 11:25:20

标签: php wordpress menu logic

Widget Logic(worpdress)中的条件功能有问题。 我想在子页面上显示菜单,并设置所有子项。

我用这个:

global $post; return (in_array(1959,get_post_ancestors($post)));

在这种情况下,它适用于所有孩子但在子页面上没有显示(1959)。

我也试着:

global $post; return (is_page('Offer') || ($post->post_parent=="1959"));

在这种情况下,它不会显示在更深的孩子身上。

2 个答案:

答案 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'));