Wordpress:如何将 url GET 参数添加到我的主菜单项

Posted

技术标签:

【中文标题】Wordpress:如何将 url GET 参数添加到我的主菜单项【英文标题】:Wordpress: How can I add url GET parameter to my main menu items 【发布时间】:2013-09-14 22:05:33 【问题描述】:

我正在尝试将 URL GET 参数添加到我在 Wordpress 中的主菜单项之一(但我不知道如何)。因此,我的方法是检测菜单项上的单击事件,然后通过 ajax 将参数传递给我的 php 页面,该页面将根据需要处理传递的值。我的主要问题是,看看我的代码,为什么不工作?有没有更好的方法在 Wordpress 中做到这一点而不依赖于 javascript

Here is the javascript:
    <script type="text/javascript">
        $(document).ready(function() 
            $("#menu-item-128").click(function() 
                $.ajax(
                    url: 'homepage.php',
                    type: "GET",
                    data: ( homeclick = true ),
                    success: function() 
                       alert("success!");
                    
                );
             );
         );
   </script>

Here is my PHP:
   $homeclick = $_GET['homeclick'];   

   if ( !isset( $_COOKIE['hs_user'] ) ) 
       get_header();
    elseif (isset( $_COOKIE['hs_user'] ) && $homeclick == true ) 
       get_header();
    else 
       // Do Something else
       header('Location: homepage-returning-users');        
   

【问题讨论】:

这个语法不对( homeclick = true )。另外,我建议您使用 WordPress 挂钩将您想要的内容添加到菜单项中。如果您使用wp_nav_menu,则有各种钩子:wp_nav_menuwp_nav_menu_objectswp_nav_menu_class 等... @brasofilo 感谢您的反馈。我的菜单项是 Home。我想像你一样添加一个 GET 参数,但我不知道如何在 WP 中做。有什么可以分享的例子吗? 【参考方案1】:

问题是您试图在 Ajax 调用中使用变量 homeclick 传递布尔值。 GET 请求只使用文本,因为数据是通过 URL 传递的,所以如果你想要一个逻辑/布尔类型,你可以在文本中使用“true”和“false”,或者可能使用 0 和 1。还有一个语法错误,见下文。

尝试以下方法:

在您的 ajax 调用中,修复语法并将 homeclick 设置为“true”,如下所示: data: ( homeclick: 'true' ),.

在您的 php 中,更改变量 $homeclick 的 if 条件,如下所示: $homeclick == 'true'.

如果您想使用布尔值,您可能需要考虑使用 POST 方法。

【讨论】:

【参考方案2】:

我建议在外观>菜单中使用自定义菜单。它将帮助您使用获取参数保留自定义 URL。你可以在这里阅读Wordpress Menu

【讨论】:

【参考方案3】:

过滤器挂钩wp_get_nav_menu_items 用于操作导航菜单。示例中使用的post_title 是菜单(导航标签)的标题,而不是帖子/页面的标题。

将此代码放入您的functions.php 文件中,根据您的需要调整post_title?my_var=test。请注意,比functions 更好的是create your own plugin。

add_filter( 'wp_get_nav_menu_items','nav_items', 11, 3 );

function nav_items( $items, $menu, $args ) 

    if( is_admin() )
        return $items;

    foreach( $items as $item ) 
    
        if( 'Home' == $item->post_title)
            $item->url .= '?my_var=test';

    
    return $items;

【讨论】:

效果很好!!!非常感谢!一个简单的问题:数字 11 和 3 在 add_filter() 中代表什么; ? 11 是优先级(1 为最高,10 默认)。 3 是参数的数量(项目、菜单、参数)。请参阅How does accepting an answer work? 请注意,要查看此“导航标签”和“标题属性”或“类”,您必须首先检查 Wordpress 管理菜单顶部“屏幕选项”按钮上的选项...: )【参考方案4】:

这是来自 Brasofilo 的叉子,非常适合我: (把这段代码放在你的主题functions.php上)

// Transform title attributes to parameters
add_filter( 'wp_get_nav_menu_items','nav_items', 11, 3 );
function nav_items( $items, $menu, $args )

    if( is_admin() )
        return $items;
    foreach( $items as $item )
    
    if ($item->attr_title != "") $item->url .= '#' . $item->attr_title;
    
    return $items;

我在这里所做的是获取菜单项的属性并将它们转换为锚名称。这样我将拥有这种类型的 URL:www.domain.com/my-page#anchor1

在这之后,我只需要做一些 jQuery 魔术来跳转(向下滚动)到锚点。 (Codepen)。

如果您看不到“标题属性”输入字段,请务必检查 Wordpress 管理菜单顶部“屏幕选项”按钮上的选项...

【讨论】:

以上是关于Wordpress:如何将 url GET 参数添加到我的主菜单项的主要内容,如果未能解决你的问题,请参考以下文章

在 WordPress 3.4 中使用 POST / GET 参数时出现 404

Wordpress编码GET参数

Wordpress 在从 url 获取参数的页面加载上使用 ajax

从 WordPress 中的 URL 中提取参数

Twig+ Wordpress - 如何将数组参数传递给函数?

如何将 JSON 字符串转换为 URL 参数(GET 请求)?