将GET PARAMS从主菜单项传递给URL

时间:2018-09-08 作者:puk789

我在“Training”页面上有一张预订表,我希望它预先填写登录用户的详细信息。为此,我需要将这些详细信息(姓名和电子邮件)传递到URL,表单应自动获取这些详细信息并将其插入相应的表单字段(插件创建者建议我这样做)。

因此,我尝试在指向培训页面的随机页面中添加一个随机按钮,添加了以下两个参数:

<a href="<?php echo esc_url( add_query_arg( array( 
                \'name\' => $user_name,
                \'email\' => $user_email
                ), site_url( \'/trainings/\' )))?>">Go to trainings</a>
现在,仅此操作即可打开以下URL:

http://mysite/trainings/?name=examplename&email=exampleemail

并抛出“找不到”错误。为什么会这样?

此外,即使这样做有效,我也需要通过常规主菜单链接(而不是随机按钮)将这两个参数传递给URL。我该怎么办?我尝试添加以上内容<a> 将代码作为主菜单的自定义链接,但不起作用。

1 个回复
最合适的回答,由SO网友:Milo 整理而成

404问题是因为name 是WordPress查询变量。在URL中添加该变量会导致WordPress查询包含slug的帖子,slug与name 字段,而不是页面。将表单字段名称更改为您知道唯一的名称。这是一种很好的做法,适用于所有需要命名的内容-表单字段、函数等。。

对于菜单项问题,您可以使用nav_menu_link_attributes 过滤器以更改href 用于特定菜单项。这里我们检查一下Trainings 是菜单项的标题,如果是这种情况,请添加GET参数:

function wpd_add_logged_in_get_params(){
    if( is_user_logged_in() ){
        add_filter( \'nav_menu_link_attributes\', function( $atts, $item ){
            if( \'Trainings\' == $item->title ){
                $current_user = wp_get_current_user();
                $atts[\'href\'] = esc_url(
                    add_query_arg(
                        array( 
                            \'wpd_name\' => $current_user->display_name,
                            \'wpd_email\' => $current_user->user_email
                        ),
                        $atts[\'href\']
                    )
                );
            }
            return $atts;
        }, 10, 2 );
    }
}
add_action( \'template_redirect\', \'wpd_add_logged_in_get_params\' );

结束

相关推荐

Altered Media Library URLs

我有一个客户的网站,是在他们离开另一家代理机构后我找到的。该机构使用了一个专有主题和自己的自托管页面生成器,以防止其在除他们之外的任何其他托管环境中更新或编辑。它的另一个方面是重新映射主题的URL并上载目录。因此,例如,代替WP在中查找主题文件http://domain.com/wp-content/themes/…. 它在里面找他们http://domain.com/t/….同样,对于图像上载,也可以在http://domain.com/wp-content/uploads/…, 它在里面找他们http