У меня такой случай. У меня есть плагин Contact Form 7 и несколько страниц с разными сервисами. На каждой странице есть контактная форма с раскрывающимся списком на боковой панели со всеми услугами. Как я могу добиться этого, когда вы находитесь в определенной службе, раскрывающееся поле выбирается автоматически по умолчанию в зависимости от службы (возможно, по URL-адресу)? Я таких тем не нахожу и мне очень интересно, как это происходит. Желательно без плагина. Заранее спасибо :)
Wordpress Contact Form 7 динамически выбирает раскрывающееся поле на основе URL-адреса
Ответы (2)
Предположим, у вас есть 3 службы: служба A, служба B, служба C, так что если вы находитесь на странице, принадлежащей службе B, с URL domain.com/service-b/my-page
, другими словами, сам URL содержит достаточно информации, чтобы определить, что эта страница часть услуги Б. Есть 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);
}
Вы можете попробовать обработчик фильтра wp:
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;
}