根据非本地IP地址条件隐藏特定导航项php wordpress

Posted

技术标签:

【中文标题】根据非本地IP地址条件隐藏特定导航项php wordpress【英文标题】:Hide specific navigation items based on non-local IP address condition php wordpress 【发布时间】:2015-06-24 10:51:23 【问题描述】:

对于工作外联网网站,我有一个可以在本地完全访问的网站。该网站现在也可以从外部完全访问。但是,有些 1 级导航项带有子菜单项是机密的,只能在工作环境中使用。

php 中,我知道如何根据 IP 地址将网站访问者重定向到受限页面。但这是一个原始的解决方案,会中断用户体验。我也宁愿不用密码保护页面,因为这也需要用户在工作环境中填写该密码。

这是我用于重定向的代码:

<?php
if (!preg_match('/^192/', $_SERVER['REMOTE_ADDR'])) 
header('HTTP/1.1 403 Forbidden');
header('Location: notallowed.php');
exit;

?>

我想知道,如何将此逻辑应用于 wp_nav 以从导航中排除特定菜单项?

【问题讨论】:

【参考方案1】:

首先我想说我不是 WordPress 开发人员。也就是说,据我所知,您应该能够为您的导航菜单使用自定义助行器。在您的自定义助行器中,您可以根据上面列出的 IP 代码有条件地添加或删除您想要/不想显示的导航选项。但是,您仍然希望将该代码保留在受限页面中,因此如果外部共享链接,他们仍然无权访问。

限制 IP 地址的一种更简洁的方法是使用 .htaccess。您应该能够将其配置为仅将某些网页限制为本地访问。这与自定义 walker 相结合将是最干净的。

http://premium.wpmudev.org/blog/limit-access-login-page/

一些自定义walker教程:

https://wordpress.stackexchange.com/questions/14037/menu-items-description-custom-walker-for-wp-nav-menu/14039#14039

http://code.tutsplus.com/tutorials/understanding-the-walker-class--wp-25401

【讨论】:

【参考方案2】:

根据您的主题如何处理菜单,您可以简单地制作 2 个菜单并根据 IP 地址显示它们

<?php if (!preg_match('/^192/', $_SERVER['REMOTE_ADDR'])): ?>
<?php wp_nav_menu('menu=full'); ?>
<?php else: ?>
<?php wp_nav_menu('menu=simple'); ?>
<?php endif; ?>

只有这样,仍然可以使用直接 URL 找到页面。如果你想防止这种情况发生,你应该看看 .htaccess 文件的强大功能。

【讨论】:

【参考方案3】:

您可以按照自己的方式使用代码。但是如果重定向用户只是让它什么都不做..

代码看起来像这样:

<?php
if (!preg_match('/^192/', $_SERVER['REMOTE_ADDR'])) 
   # Do Nothing 
else
   # Show Menu Item

?>

【讨论】:

以上是关于根据非本地IP地址条件隐藏特定导航项php wordpress的主要内容,如果未能解决你的问题,请参考以下文章

在PHP中获取本地机器IP地址[重复]

国内电脑ip地址如何隐藏,切换本地网络IP地址

如何根据特定条件在 RecyclerView 上为某些项目隐藏 ImageView?

PHP 根据IP获取地区查询数据库内容

SwiftUI 如何根据条件导航到多个可能的视图?

根据参数显示或隐藏 tablix