在 Wordpress 菜单中创建动态站点地址
Posted
技术标签:
【中文标题】在 Wordpress 菜单中创建动态站点地址【英文标题】:Create a Dynamic Site Address in a Wordpress Menu 【发布时间】:2013-07-26 01:03:58 【问题描述】:我正在一个基于 Wordpress 主题的现有网站上做一些工作,但使用了大约 15 个插件(包括 Buddypress)。其中一个特别是 WP Sliding Login|Dashboard 插件,它有一个指向用户活动源的链接。我在 wp-sliding-login-dashboard.php 文件中找到了创建该链接的代码:
<?php
if ( is_user_logged_in() )
global $current_user;
$username = $current_user->user_login;
echo ' <li><a href="http://www.mywebsitename.com/members/' . $username . '/activity/">Activity Feed</a></li>';
?>
我想使用此代码将用户发送到同一位置,但使用主页顶部的链接。不幸的是,主页链接都是使用 Wordpress 菜单创建的,据我所知,它只允许使用附加到现有页面的静态链接。
我是否创建一个虚拟页面来链接到仅执行上述代码的退出?这甚至可能吗?想象一个 5 岁的孩子试图读莎士比亚,你对我作为一名程序员的能力有所了解,所以请随意与我互动 - 即,如果你说,“哦,只需创建一个范围函数,而不是创建一个全局函数函数”,我会盯着你流口水和困惑。
图片清晰:滑动登录菜单(WP-Sliding Login|Dashboard Plugin),在状态栏中显示目标URL为www.ferrignofit.com/members/FerrignoFit/activity/(当前登录用户为FerrignoFit ): http://i.imgur.com/NPvmCXU.jpg
主页面基于 Wordpress 的菜单,我想访问上述 URL,但目前正在访问 www.ferrignofit.com/activity/,这是一个不同的页面: http://i.imgur.com/dIiFpDC.jpg
【问题讨论】:
绝对可行,我很想写一个答案,但你的问题中有一些变量,我需要先知道才能回答。首先,您想要做的事情的图片表示会很棒,因为我不知道链接应该去哪里。接下来我可以建议您检查codex.wordpress.org/Function_Reference/wp_nav_menu,这样您就可以看到您可以在菜单之前或之后添加内容,甚至在菜单项之后等等。如果我理解正确,您想添加一个带有动态信息的静态链接所以它适用于当前登录的用户。 感谢您的反馈!这是滑动登录的图像,将您带到正确的页面: 看不到图,哪里漏掉了?还是你? 呸!尝试编辑原始帖子以添加图片,但我需要至少 10 的声誉才能发布图片。 上传图片到图片库并分享链接。 【参考方案1】:所以这里有一个针对这个特定问题的 jQuery 解决方案。通过查看您拥有的图像,您想要做的是针对动态 WordPress 菜单中的特定锚点。
您可能知道,您可以为 WordPress 菜单功能创建自定义链接...它只是让您设置标签和 URL。您现在应该创建这样的项目,并给它一个 URL 的哈希值。
现在为该特定菜单项设置一个类,这样您就可以为 jQuery 提供一个很好的句柄来定位它(否则您可以使用 WordPress 为每个特定菜单项创建的动态类)。
如果你有一个类集或者你知道你需要定位什么,那么你可以在你的菜单之前添加这个代码块。
<?php if (is_user_logged_in()) ?>
<script>
$(document).ready(function(e)
var targetNav = $('li.customClassName a');
var userName = '<?php $current_user = wp_get_current_user(); echo $current_user->display_name;?>';
var userUrl = 'http://www.mywebsitename.com/members/'+ userName +'/activity/';
targetNav.attr('href',userUrl);
);
</script>
<?php else ?>
<script>
$(document).ready(function(e)
var targetNav = $('li.customClassName a');
targetNav.attr('href','http://www.***.com');
);
</script>
<?php ?>
请不要说我正在使用 PHP 来获取 WordPress 中的当前用户名,在我获取用户名并将其存储在 userName
变量中之后,我在 userUrl
中使用它来设置我想要的路径.
另一方面,我使用的是is_user_logged_in()
,因此如果用户实际上没有登录,您可以选择将链接设置为其他内容。因此,使用此if
语句,两个代码块之一将由 PHP 输出。
一旦设置了两个变量,我只需使用 jQuery 定位我的菜单项并修改 href
属性以将哈希替换为路径和动态用户名。
虽然这不是混合 JS 和 PHP 的好习惯,但我想在这里了解其他人可以建议的其他解决方案,因此我将其发布为针对您非常具体的问题的解决方案。
我用我自己的 WordPress 网站测试了这段代码,它可以工作,请记住,这段代码需要在 PHP 文件中,否则<script>
标签中使用的 PHP 对服务器没有任何意义,如果它在.js
文件。
【讨论】:
首先:感谢您对硫磺的回复!第二:我将代码添加到哪个php文件-header.php?当你说“用 jQuery 定位菜单项时,你的意思是将上面代码中的 targetNav 值更改为我给菜单项 (activity-feed) 提供的类名吗?当你说“修改 href 属性”时,你只是意思是将上面代码中的href之后的站点地址更改为同一页面(ferrignofit.com/activity-stream)? 嗨@AndrewFleischer:是的,继续并将文件添加到靠近您的菜单调用的标题中,以便更容易看到它的用途。是的,在目标菜单项上,更改targetNav
以匹配您的选择器,并修改 href 属性。如果您想向我发送小提琴和指向您网站的链接,我将帮助您使代码更符合您的确切要求。要修改的主要内容是变量,以使其适合您。
这是一个小提琴,应该根据您在上面的问题中提到的内容工作。请让我知道这是否适合您,我会将其添加到帖子的正文中。 jsfiddle.net/sulfureous/tfTTS
感谢硫磺 - 使用了小提琴中的更新代码,但活动提要没有去任何地方,我想我确定这是我没有正确实施的东西。我仍然有只有一个“#”作为 url 的 Activity Feed 菜单项,并且我已经将类设置为 activity-feed。我想将网址更改为 www.ferrignofit.com/activity-feed/ 吗?
在这个阶段,我需要查看所有代码以调试可能发生的情况,您是否有一个测试环境,我们可以检查以确保 jQuery 在正确的位置,使确保代码很好地适应您的需求。以上是关于在 Wordpress 菜单中创建动态站点地址的主要内容,如果未能解决你的问题,请参考以下文章
无法访问在 Docker 中配置的 wordpress,即使其状态正在运行
如何在没有通知和确认过程的情况下更改 WordPress 中的主管理员电子邮件地址
如何使用 NavWalker 和 bootstrap.min.css 在 WordPress 中创建 Bootstrap 导航栏