如何确定某个特定帖子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;
}
最合适的回答,由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 );
.