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

时间:2013-09-11 02:32:46

标签: php javascript wordpress menu parameters

我正在尝试将一个URL GET参数添加到Wordpress中的一个主菜单项中(但我不知道如何)。所以,我的方法是检测菜单项上的click事件,然后通过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');        
   }

4 个答案:

答案 0 :(得分:8)

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

home nav menu

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

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;
}

答案 1 :(得分:0)

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

尝试以下方法:

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

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

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

答案 2 :(得分:0)

我建议在Appearance&gt;菜单中使用自定义菜单。它将帮助您保留带有get参数的自定义URL。您可以在此处阅读Wordpress Menu

答案 3 :(得分:0)

那是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 Admin菜单顶部“屏幕选项”按钮上的选项...