Php 正在添加类当前页面项目
我正在进行Wordpress设计,我想创建一个自定义菜单Php 正在添加类当前页面项目,php,wordpress,Php,Wordpress,我正在进行Wordpress设计,我想创建一个自定义菜单 $items = wp_get_nav_menu_items('Menu', array( 'order' => 'ASC', 'orderby' => 'menu_order', 'post_type' => 'nav_menu_item', 'post_status' =&g
$items = wp_get_nav_menu_items('Menu', array(
'order' => 'ASC',
'orderby' => 'menu_order',
'post_type' => 'nav_menu_item',
'post_status' => 'publish',
'output' => ARRAY_A,
'output_key' => 'menu_order',
'nopaging' => true,
'update_post_term_cache' => false));
echo '<pre>'; print_r($items); echo '</pre>';
foreach($items as $item){
echo '<div class="menu_entry"><a href="'.$item->url.'">'.$item->title.'</a></div>';
}
$items=wp\u get\u nav\u menu\u菜单项('menu',数组(
“订单”=>“ASC”,
'orderby'=>'菜单\u顺序',
“post_类型”=>“导航菜单项”,
“发布状态”=>“发布”,
“输出”=>数组_A,
“输出键”=>“菜单顺序”,
“没有”=>正确,
'update_post_term_cache'=>false));
回声';打印(项目);回声';
foreach($items作为$item){
回声';
}
问题是,我需要标准菜单中的“当前页面”类,即WordPress创建类
您知道如何添加此类吗?您可以在当前页面/cat etc ID上与菜单项object\u ID(链接到的页面/类别等的ID)进行比较 类似于(未经测试)
global$post;
$thePostID=$post->ID;
foreach($items作为$item){
if($thePostID===$item->object\u id){
回声';
}否则{
回声';
}
}
解决方案时间:
WordPress添加这些类的函数是。当您使用wp\u nav\u菜单
而不是wp\u get\u nav\u菜单项
时,已调用此项。幸运的是,后者提供了一个过滤器,因此我们可以自己完成:
if ( $menu_items = wp_get_nav_menu_items( 'menu' ) ) {
foreach ( $menu_items as $menu_item ) {
$current = ( $menu_item->object_id == get_queried_object_id() ) ? 'current' : '';
echo '<li class="' . $current . '"><a href="' . $menu_item->url . '">' . $menu_item->title . '</a></li>';
}
}
使用函数。这在所有页面中都可以正常工作,包括博客页面
请参见一个示例:
if($menu\u items=wp\u get\u nav\u menu\u菜单项('menu')){
foreach($菜单项作为$菜单项){
$current=($menu\u item->object\u id==get\u queryed\u object\u id())?'current':'';
echo“;
}
}
出于某种原因,这只适用于使用常规双等于(=)的情况而不是Triple equals。如果您选择了类别菜单项(例如,object_id是cat_id),则该选项将不起作用。@AdamPietrasiak为自定义链接提供了第二个选项@Ethac的解决方案,它更好:)这非常有用-我使用$items并使用switch语句修改类,允许我添加一些更友好的CSS我的前端开发人员的标签名。比和步行者打架好多了:)非常感谢,这很有用。这应该是公认的答案。
add_filter( 'wp_get_nav_menu_items', 'prefix_nav_menu_classes', 10, 3 );
function prefix_nav_menu_classes($items, $menu, $args) {
_wp_menu_item_classes_by_context($items);
return $items;
}
if ( $menu_items = wp_get_nav_menu_items( 'menu' ) ) {
foreach ( $menu_items as $menu_item ) {
$current = ( $menu_item->object_id == get_queried_object_id() ) ? 'current' : '';
echo '<li class="' . $current . '"><a href="' . $menu_item->url . '">' . $menu_item->title . '</a></li>';
}
}