You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现点击“plaats een opdracht”菜单时按登录状态跳转页面?

嘿,这个需求在WordPress环境下(毕竟你提到了Gravity Forms,大概率是基于WP的)实现起来挺简单的,我给你准备了两种方案,按需选择就行:

方案一:自定义代码实现(灵活可控,推荐)

这种方式不需要额外插件,直接通过代码实现精准控制,分两种思路:

后端PHP替换链接(最安全)

后端直接根据用户登录状态生成正确的菜单链接,避免前端跳转的漏洞:

  1. 先给你的目标菜单项加个标识:进入WP后台的「外观→菜单」,找到“plaats een opdracht”这个菜单项,勾选右上角的「显示高级选项」,然后在「CSS类」里填个自定义类,比如opdracht-menu-item。
  2. 打开主题的functions.php文件(或者用子主题的functions.php,避免主题更新丢失代码),添加以下代码:
function swap_opdracht_menu_link($menu_items, $args) {
    // 替换成你实际的菜单位置名称,比如'primary'
    if ($args->theme_location === 'primary') {
        foreach ($menu_items as $item) {
            // 通过CSS类匹配菜单项,也可以用$item->title === 'plaats een opdracht'来匹配标题
            if (in_array('opdracht-menu-item', $item->classes)) {
                if (is_user_logged_in()) {
                    // 替换为你的Gravity Form页面ID,比如123是页面ID
                    $item->url = get_permalink(123);
                } else {
                    // 用WP默认注册链接,或者替换成你的自定义注册页面URL
                    $item->url = wp_registration_url();
                }
            }
        }
    }
    return $menu_items;
}
add_filter('wp_nav_menu_objects', 'swap_opdracht_menu_link', 10, 2);
  1. 保存代码后,切换登录/未登录状态测试一下,菜单链接会自动切换。

前端JS控制跳转(适合快速修改)

如果不想动PHP,也可以用前端JS结合WP的登录状态变量来实现:

  1. 先在主题的functions.php里添加代码,把登录状态传给前端:
function pass_user_status_to_frontend() {
    wp_localize_script('jquery', 'wpSiteData', array(
        'isLoggedIn' => is_user_logged_in(),
        'formPageUrl' => esc_url(get_permalink(123)), // Gravity Form页面URL
        'registerPageUrl' => esc_url(wp_registration_url()) // 注册页面URL
    ));
}
add_action('wp_enqueue_scripts', 'pass_user_status_to_frontend');
  1. 然后在主题的自定义JS文件(或者后台「外观→自定义→额外CSS/JS」里的JS部分)添加:
document.addEventListener('DOMContentLoaded', () => {
    const opdrachtBtn = document.querySelector('.opdracht-menu-item a');
    if (opdrachtBtn) {
        opdrachtBtn.addEventListener('click', (e) => {
            if (!wpSiteData.isLoggedIn) {
                e.preventDefault();
                window.location.href = wpSiteData.registerPageUrl;
            } else {
                window.location.href = wpSiteData.formPageUrl;
            }
        });
    }
});
方案二:插件实现(适合非技术用户)

如果你不想写代码,可以用WP的条件菜单插件来实现:

  • 安装并激活Conditional Menus或者Menu Item Visibility Control插件;
  • 先创建两个菜单项:一个链接到Gravity Form页面,另一个链接到注册页面;
  • 给第一个菜单项设置「仅登录用户可见」,第二个设置「仅访客可见」;
  • 把两个菜单项放到同一个菜单位置,插件会自动根据用户状态显示对应的按钮。
额外提示

如果你的“plaats een opdracht”不是WP默认菜单,而是自定义写的按钮,那直接在输出按钮的地方用PHP判断就行:

<?php if (is_user_logged_in()) : ?>
    <a href="<?php echo esc_url(get_permalink(123)); ?>" class="your-button-class">plaats een opdracht</a>
<?php else : ?>
    <a href="<?php echo esc_url(wp_registration_url()); ?>" class="your-button-class">plaats een opdracht</a>
<?php endif; ?>

记得把代码里的123替换成你实际的Gravity Form页面ID,注册页面如果是自定义的,也替换成对应的URL哦。

内容的提问来源于stack exchange,提问作者Ries

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:45:02