Wordpress Contact Form 7 динамически выбирает раскрывающееся поле на основе URL-адреса - PullRequest
0 голосов
/ 04 августа 2020

У меня такой случай. У меня есть плагин Contact Form 7 и несколько страниц с разными сервисами. На каждой странице есть контактная форма с раскрывающимся списком на боковой панели со всеми услугами. Как я могу добиться этого, когда вы находитесь в определенной службе c, раскрывающееся поле выбирается автоматически по умолчанию в зависимости от службы (возможно, по URL-адресу)? Я таких тем не нахожу и мне очень интересно, как это происходит. Желательно без плагина. Заранее спасибо :)

1 Ответ

1 голос
/ 05 августа 2020

Предположим, у вас есть 3 сервиса: Service A, Service B, Service C, так что если вы находитесь на странице, принадлежащей сервису B, с URL domain.com/service-b/my-page, другими словами, самого URL достаточно информация, позволяющая определить, что эта страница является частью службы B. Есть 2 способа перейти к автоматическому выбору c в раскрывающемся списке,

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