【问题标题】:Wordpress Contact Form 7 dynamically select dropdown field based on urlWordpress Contact Form 7 根据 url 动态选择下拉字段
【发布时间】:2020-11-24 19:48:23
【问题描述】:

我有以下情况。我有 Contact Form 7 插件和几个具有不同服务的页面。每个页面都有一个联系表格,边栏中的选择下拉列表包含所有服务。 当您在特定服务中时,如何实现这一点,默认情况下会根据服务(可能通过 URL)自动选择下拉字段? 我没有找到这样的话题,我对这是如何发生的非常感兴趣。最好没有插件。在此先感谢:)

【问题讨论】:

    标签: wordpress contact-form-7


    【解决方案1】:

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

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

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

    (function($){
    $(document).ready(function(){
      //determine the current page,
      let page = window.location.href, opt='';
      //comment the following line for your site, this is only for this example test.
      page = 'http://example.com/service-b/my-page';
    
      switch(true){
        case page.indexOf('service-b')>0:
          opt='serviceb';
          break;
        case page.indexOf('service-c')>0:
          opt='servicec';
          break;
        case page.indexOf('service-a')>0:
          opt='servicea';
          break;
      }
    
      $('select[name="select-services"]').find('option[value="'+opt+'"]').prop('selected', 'selected');
    })
    })(jQuery)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <select name="select-services">
     <option value="">select a service</option>
     <option value="servicea">Service A</option>
     <option value="serviceb">Service B</option>
     <option value="servicec">Service C</option>
    </select>

    2 另一种方法是在页面加载之前使用 php 修改服务器端的选择选项,并挂钩过滤器“do_shortcode_tag”,一旦执行 cf7 表单简码,就会触发该过滤器。将以下代码放入您的主题functions.php 文件中,

    add_filter('do_shortcode_tag','set_service',10,3);
    function set_service($html, $attr, $tag){
      //check this is a cf7 shortcode.
      if('contact-form-7' !== $tag){
        return $output;
      }
      //if you have several forms, you can also check this is the right form using $attr['id']
      //determine which page you are on
      global $wp;
      $serv='';
      switch(true){
        case false !== strpos($wp->request, 'service-a' ):
          $serv='servicea';
          break;
          case false !== strpos($wp->request, 'service-b' ):
          $serv='serviceb';
          break;
        case false !== strpos($wp->request, 'service-c' ):
          $serv='servicec';
          break;
      }
      return str_replace('value="'.$serv.'"', 'value="'.$serv.'" selected="selected"', $html);
    }
    

    【讨论】:

    • 非常感谢您的回答。不幸的是,我不能同时处理这两个问题。 JavaScript 解决方案在 .find - 'missing) after argument list' 周围给我一个语法错误,而 php 解决方案我的整个联系表格消失了。显然我做的不对。你有什么想法吗?
    • 对不起,我在 js 代码中做了一个类型,我已经更正了它并将其设置为一个 jsfiddle 示例,您可以运行测试并查看它是否有效。以上是非此即彼的解决方案,要么是客户端使用 JavaScript 的 1,要么是服务器端使用 PHP 的解决方案 2,您不需要两者。
    • 是的,当然,我也无法调整。现在一切都与 javascript 解决方案完美结合。非常感谢您快速正确的回答:)
    • 感谢您的反馈!声望低于 15 人的投票将被记录,但不会更改公开显示的帖子得分。抱歉:(很快我就会有 15 个 :)
    • 没错,但你可以选择答案......除非你希望得到另一个答案。
    【解决方案2】:

    你可以试试 wp filter hook:

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

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 1970-01-01
      • 2020-04-17
      • 2021-06-27
      • 2019-01-18
      • 1970-01-01
      • 2020-07-03
      • 2015-03-21
      • 2014-01-08
      相关资源
      最近更新 更多