如何根据插件中的设置动态删除菜单项?

时间:2013-01-18 作者:Phil Piper

我已经开始编写一个插件,允许管理员选择特定页面并将其设置为可见only to logged-in users; 插件可以选择将限制应用于all child pages 也当站点访问者试图查看这些页面时,他们会被重定向到登录页面。

到目前为止,一切顺利。这一切都可以做到这一点,并且复制了我在现有插件中看到的功能。

然而,我还想做的是automatically remove all of those pages (including child pages, where specified) from the front-end site\'s menus. 除非您登录,否则我根本不想让它们可见。

我见过一些解决方案,人们可以创建两个菜单,并根据登录状态在它们之间切换,但这是我不想做的额外步骤。

我想我可以通过在插件代码中为“wp\\u nav\\u menu\\u items”添加一个过滤器或操作挂钩来实现这一点,但我还没有成功。

有什么想法吗?

ThanksPhil公司

其他详细信息(问题的较小部分):

下面是我的插件中的一些代码,我正试图使用这些代码连接到菜单项中:

add_filter(\'wp_nav_menu_items\',\'ppa_filter_visible_menus\');

function ppa_filter_visible_menus($nav) {
    die("filter menus");
}
我的问题是没有调用ppa\\u filter\\u visible\\u菜单。

1 个回复
SO网友:Cid Ubaid

一个简单的解决方案是CSS

<!--    HIDES MENU ITEM IF THE USER IS NOT LOGGED IN   -->
<?php if (is_user_logged_in()){
echo "";}
else {
echo "<style type=\'text/css\'>
.menu-item-58 {display:none;}
</style>";
};
?>
但是如果你想把它编码下来,请查看这个插件的源代码http://wordpress.org/extend/plugins/if-menu/ -- 这对你有很大帮助。

而如果您只需要一个编码答案-一个简单的答案-请替换标题

<ul>
  <?php wp_list_pages(); ?>
</ul>
使用条件语句

if user not logged in
show
<ul>
  <?php wp_list_pages(\'exclude=17,38\' ); ?>
</ul>
其中exlude是您不希望未登录用户看到的页面id。

使用else command向登录用户显示所有菜单时

else 
<ul>
  <?php wp_list_pages(); ?>
</ul>
希望这对你有帮助。让我们了解最新情况。

结束