Wordpress联系人表单7基于url动态选择下拉字段

Wordpress联系人表单7基于url动态选择下拉字段,wordpress,contact-form-7,Wordpress,Contact Form 7,我有以下情况。我有联系表单7插件和两个不同服务的页面。每个页面都有一个联系人表单,在侧边栏中有“选择”下拉列表,其中包含所有服务。 当您在特定的服务中时,如何实现这一点?默认情况下,将根据服务自动选择下拉字段(可能是通过URL)? 我没有发现这样的话题,我对这种情况是如何发生的非常感兴趣。最好没有插件。提前感谢:)假设您有3个服务,服务A、服务B、服务C,这样,如果您所在的页面属于服务B,URLdomain.com/Service-B/my page,换句话说,URL本身有足够的信息来确定此页面

我有以下情况。我有联系表单7插件和两个不同服务的页面。每个页面都有一个联系人表单,在侧边栏中有“选择”下拉列表,其中包含所有服务。 当您在特定的服务中时,如何实现这一点?默认情况下,将根据服务自动选择下拉字段(可能是通过URL)?
我没有发现这样的话题,我对这种情况是如何发生的非常感兴趣。最好没有插件。提前感谢:)

假设您有3个服务,服务A、服务B、服务C,这样,如果您所在的页面属于服务B,URL
domain.com/Service-B/my page
,换句话说,URL本身有足够的信息来确定此页面是服务B的一部分。有两种方法可以继续在下拉列表中实现自动选择

1在客户端,在页面加载后使用JavaScript

使用以下脚本选择正确的选项

(函数($){
$(文档).ready(函数(){
//确定当前页面,
让page=window.location.href,opt='';
//为您的站点注释以下行,这仅用于此示例测试。
佩奇http://example.com/service-b/my-page';
开关(真){
案例页。索引of('service-b')>0:
opt='serviceb';
打破
案例页面。indexOf('service-c')>0:
opt='servicec';
打破
案例页。indexOf('service-a')>0:
opt='servicea';
打破
}
$('select[name=“select services”]')。查找('option[value=“”+opt+'”)。属性('selected','selected');
})
})(jQuery)

选择一项服务
服务A
服务B
服务C

让我们假设您有3个服务,服务A、服务B、服务C,如果您所在的页面属于服务B,URL
domain.com/Service-B/my page
,换句话说,URL本身有足够的信息来确定此页面是服务B的一部分。有两种方法可以继续在下拉列表中实现自动选择

1在客户端,在页面加载后使用JavaScript

使用以下脚本选择正确的选项

(函数($){
$(文档).ready(函数(){
//确定当前页面,
让page=window.location.href,opt='';
//为您的站点注释以下行,这仅用于此示例测试。
佩奇http://example.com/service-b/my-page';
开关(真){
案例页。索引of('service-b')>0:
opt='serviceb';
打破
案例页面。indexOf('service-c')>0:
opt='servicec';
打破
案例页。indexOf('service-a')>0:
opt='servicea';
打破
}
$('select[name=“select services”]')。查找('option[value=“”+opt+'”)。属性('selected','selected');
})
})(jQuery)

选择一项服务
服务A
服务B
服务C
您可以通过wp过滤器挂钩尝试:

您可以通过wp过滤器挂钩进行尝试:


非常感谢你的回答。不幸的是,我不能同时处理这两个问题。JavaScript解决方案给了我一个语法错误。find-'missing)after argument list'和php解决方案我的整个联系人表单都消失了。很明显,我做得不对。你有什么想法吗?对不起,我在js代码中创建了一个类型,我已经更正了它,并将其设置为一个JSFIDLE示例,你可以运行测试并查看它的工作情况。以上是一个或多个解决方案,客户端使用JavaScript的解决方案1,服务器端使用PHP的解决方案2,两者都不需要。是的,当然,我就是无法调整。现在,一切都与javascript解决方案完美配合。非常感谢您快速正确的回答:)感谢您的反馈!声誉低于15的人所投的票将被记录,但不会改变公开显示的帖子分数。抱歉:(很快我会有15:)是的,但是你可以选择答案…除非你希望得到另一个答案。非常感谢你的答案。不幸的是,我不能同时处理这两个问题。JavaScript解决方案给了我一个语法错误。find-'missing)after argument list'和php解决方案我的整个联系人表单都消失了。很明显,我做得不对。你有什么想法吗?对不起,我在js代码中创建了一个类型,我已经更正了它,并将其设置为一个JSFIDLE示例,你可以运行测试并查看它的工作情况。以上是一个或多个解决方案,客户端使用JavaScript的解决方案1,服务器端使用PHP的解决方案2,两者都不需要。是的,当然,我就是无法调整。现在,一切都与javascript解决方案完美配合。非常感谢您快速正确的回答:)感谢您的反馈!声誉低于15的人所投的票将被记录,但不会改变公开显示的帖子分数。抱歉:(很快我会有15:)是的,但是你可以选择答案…除非你希望得到另一个答案。
add_filter( 'do_shortcode_tag','sercice_check',10,3);

function sercice_check($output, $tag, $attr){

// Checking your contact form id
// [contact-form-7 id="659" title="My Service"]

  if(  isset( $attr['id'] ) &&  $attr['id'] == 659 ){ //you can even check for specific attributes
    global $wp;

    $service='';

    // Site url like : www.mysite.com/service/service-a/
    switch(true){

        case false !== strpos($wp->request, 'service-a' ):
            $service='Service A';
        break;

        case false !== strpos($wp->request, 'service-a' ):
            $service='Service B';
        break;
    }

    return str_replace('value="'.$service.'"', 'value="'.$service.'" selected="selected"', $output);
  }

  return $output;
}