问题描述
我有一个需要两个”main menus” 的客户端,我们需要以编程方式显示当前页面中包含的任何菜单。我怎样才能做到这一点?
例如:我们在”About” 页面。找出两个菜单中的哪一个包含”About” 页面并显示一个。
最佳解决方案
这是我写的这个功能。您给它一个菜单 slug /name /ID 和 post /page ID,如果该 post /page 在指定的菜单中,并且 FALSE
则返回 TRUE
。那么这只是一个快速 if /else 语句来检查两个菜单并显示正确的菜单。
/**
* Check if post is in a menu
*
* @param $menu menu name, id, or slug
* @param $object_id int post object id of page
* @return bool true if object is in menu
*/
function cms_is_in_menu( $menu = null, $object_id = null ) {
// get menu object
$menu_object = wp_get_nav_menu_items( esc_attr( $menu ) );
// stop if there isn't a menu
if( ! $menu_object )
return false;
// get the object_id field out of the menu object
$menu_items = wp_list_pluck( $menu_object, 'object_id' );
// use the current post if object_id is not specified
if( !$object_id ) {
global $post;
$object_id = get_queried_object_id();
}
// test if the specified page is in the menu or not. return true or false.
return in_array( (int) $object_id, $menu_items );
}
使用示例
if( cms_is_in_menu( 'main-menu' ) ) {
// do something like wp_nav_menu( $args );
}
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。