【问题标题】:Wordpress: How can I add url GET parameter to my main menu itemsWordpress:如何将 url GET 参数添加到我的主菜单项
【发布时间】: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 感谢您的反馈。我的菜单项是 。我想像你一样添加一个 GET 参数,但我不知道如何在 WP 中做。有什么可以分享的例子吗?

标签: php javascript wordpress menu parameters


【解决方案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 管理菜单顶部“屏幕选项”按钮上的选项...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-04-23
        • 2012-10-24
        • 2013-10-19
        • 2021-07-15
        • 2011-10-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多