替换特定菜单项

时间:2015-05-29 作者:Steve Kim

因此,我了解如何使用下面的内容来添加自定义代码,以特定菜单为目标。

<?php

wp_nav_menu(
 array(
  \'menu\' => \'Project Nav\',
  // do not fall back to first non-empty menu
  \'theme_location\' => \'__no_such_location\',
  // do not fall back to wp_page_menu()
  \'fallback_cb\' => false
 )
 );

?>
我的问题如下。

比如说,我有一个叫做“primary”的菜单。此菜单中有4个菜单项(下图)。

enter image description here

其中一项称为“简介”。

我想用下面的代码替换“Profile”一词,该代码显示用户配置文件照片,而不是“Profile”。

    <?php global $my_profile; ?>
    <?php if (is_user_logged_in()) : ?>
    <div class="img" data-key="profile"><?php echo get_avatar( get_current_user_id(), 64 ); ?></div>
    <?php endif; ?>
因此,最终结果如下所示:

enter image description here

现在,我如何专门针对菜单项标题?

编辑:

因此,我得到了以下基础,我不知道为什么它不起作用。

function nav_replace_wpse_189788($item_output, $item, $args) {
 //var_dump($item_output, $item);
 if( $args->theme_location == \'primary\' ){
  return $items;

   if (\'royal_profile_menu_title\' == $item->title) {
    global $my_profile;

    if (is_user_logged_in()) { 
      return \'<div class="img" data-key="profile">\'.get_avatar( get_current_user_id(), 64 ).\'</div>\';
        }
    }
  }
   return $item_output;
 }
 add_filter(\'walker_nav_menu_start_el\',\'nav_replace_wpse_189788\',10,2);
这是我的逻辑。首先以“主”菜单为目标,然后查找项目标题“royal\\u profile\\u menu\\u title”,然后用输出替换单词title

(我的菜单标题是“royal\\u profile\\u menu\\u title”:下图)enter image description here

任何

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

使用walker_nav_menu_start_el 过滤器(不包含所有PHP标记垃圾邮件):

function nav_replace_wpse_189788($item_output, $item) {
  //   var_dump($item_output, $item);
  if (\'Profile\' == $item->title) {
    global $my_profile; // no idea what this does?
    if (is_user_logged_in()) { 
      return \'<div class="img" data-key="profile">\'.get_avatar( get_current_user_id(), 64 ).\'</div>\';
    }
  }
  return $item_output;
}
add_filter(\'walker_nav_menu_start_el\',\'nav_replace_wpse_189788\',10,2);
注意:我必须编辑您的代码return 字符串,而不是echo 一您可能需要调整if 有条件的取消注释var_dump() 看看你需要做什么。

SO网友:Marek

通常,我会使用一些CSS解决方法。在菜单管理中,您可以将CSS类添加到菜单项中(如果未显示该字段,您可以在屏幕选项中找到它),例如“profile link”。

然后,您可以向模板标题部分添加类似的内容:

<?php
$avatar = get_avatar_url( get_current_user_id(), array(\'size\' => 64) ); // from WP 4.2
$image_url = $avatar[\'url\'];
?>

<style type="text/css">
.menu li.profile-link { background-image: url(<?php echo $image_url ?>); /* + another CSS*/  }
.menu li.profile-link span { display: none; }
</style>
并添加到wp_nav_menu 作用\'link_before\' => \'<span>\', \'link_after\' => \'</span>\' 选项。

没有经过测试,但应该可以。

结束

相关推荐

将javascript添加到unctions.php会导致模板出现问题

我想要一个“阅读”链接,点击后可以移动到页面的另一部分。I understand the HTML bit 和I have even used some nice scrolling.它起作用了。但当实施时,我的部分主题就被打破了。滑块图像消失,H1文本全部聚集到左侧。下面是我添加到子函数的内容。php,以便将javascript注入头部区域。/** * Smooth scroll */ add_action(\'wp_head\', \'wpse_43672_wp