如何测试某个特定页面是否为首页?

时间:2016-11-16 作者:stofl

如何确定某个特定帖子id是否属于设置为首页的页面(通过设置>后端阅读设置为静态首页)?

上下文:我想编写一个函数,返回特定页面和菜单的所有菜单子级:

function getMenuChildren($menuId, $postId)
{
    $menuItems = wp_get_nav_menu_items($menuId);
    if (is_front_page()) {
        $menuIdOfCurrentPage = 0;
    } else {
        foreach ($menuItems as $menuItem) {
            if ((int) $menuItem->object_id === $postId) {
                $menuIdOfCurrentPage = $menuItem->ID;
                break;
            }
        }
    }

    $childrenMenuItems = [];
    if (isset($menuIdOfCurrentPage)) {
        foreach ($menuItems as $menuItem) {
            if ((int) $menuItem->menu_item_parent === $menuIdOfCurrentPage)
                $childrenMenuItems[] = $menuItem;
        }
    }
    return $childrenMenuItems;
}
我只在当前页面上使用它,所以上面的代码可以工作,但是is_front_page() 不是这样的,我想写一个函数。将函数重命名为getMenuChildrenOfCurrentPost 并移除$postId 当然,参数应该是wordpress样式,但也不是这样,我想编写代码。

Update

以下是“birgire”回答后的结果:

function getMenuChildren($menuId, $postId)
{
    $menuItems = wp_get_nav_menu_items($menuId);
    if ($postId === (int) get_option(\'page_on_front\')) {
        $menuIdOfPage = 0;
    } else {
        foreach ($menuItems as $menuItem) {
            if ((int) $menuItem->object_id === $postId) {
                $menuIdOfPage = $menuItem->ID;
                break;
            }
        }
    }

    $childrenMenuItems = [];
    if (isset($menuIdOfPage)) {
        foreach ($menuItems as $menuItem) {
            if ((int) $menuItem->menu_item_parent === $menuIdOfPage)
                $childrenMenuItems[] = $menuItem;
        }
    }
    return $childrenMenuItems;
}

1 个回复
最合适的回答,由SO网友:birgire 整理而成

您可以尝试替换:

if (is_front_page()) {
    $menuIdOfCurrentPage = 0;
检查page_on_front 选项:

if( 
       is_int( $postID ) 
    && $postID > 0 
    && $postID === (int) get_option( \'page_on_front\' ) 
) {
    $menuIdOfCurrentPage = 0;
这里我们添加了一个检查$postID 是正整数,因为page_on_front 如果未选择任何页面作为frontpage,则选项为0。

然后考虑重命名$menuIdOfCurrentPage$menuIdOfPage.

例如,在PHP7中,我们可以使用strict scalar type declerations:

function getMenuChildren( int $menuId, int $postId )
{
当与非整数输入参数一起使用时,会引发TypeError:

致命错误:未捕获的TypeError:传递给getMenuChildren()的参数1必须是在[…]中调用的整型、未给定的类型[…]第10行,定义见[…][…]

使用declare( strict_types = 1 );.

相关推荐

Sub Menus will not work

我急需帮助。我尽了我所知的一切努力将我的子菜单恢复到我的网站上。我安装了一个元滑块插件,在我的主页上获得一个滑块。它工作得很好,然后,我的子菜单停止工作!然后我停用了插件,认为这就是导致它的原因,子菜单仍然没有显示在我的网站上。我不确定我是否丢失了代码或什么,但我将非常感谢能得到的任何帮助。我也有海明威的主题,不确定这是否有什么关系。