Здравствуйте. Пишу простой плагин обратной связи для Wordpress. Столкнулся с проблемой двойного вывода содержимого шорткода. Шорткод выводит форму обратной связи. Проблема существует только в режиме редактирования в Elementor. Над окном конструктора выводится содержимое шорткода. В том месте, где оно должно выводиться, также присутствует. Причём, если на странице использовать шорткод 5 раз, то в редакторе Elementor, сверху, также выведется 5 форм.
Вот этот код не работает:
// Create form shortcode
function get_jfc_form ($atts) {
$params = shortcode_atts(
array(
'wrapper_style' => '',
'uniqid' => uniqid(),
),
$atts
);
$form_wrapper_style = $params[ 'wrapper_style' ];
$uniqid = $params[ 'uniqid' ];
// Подключаю шаблон с формой
include(__DIR__ . "/jfc-template.php");
}
add_shortcode( 'jfc_form', 'get_jfc_form' );
Мне в шорткод нужно подключить шаблон с формой. В этом шаблоне есть переменные PHP. Как я только не пробовал. File_get_contents не видит переменные и выводит просто как текст. Include выводит шаблон с формой как echo.
Проблема ушла только когда весь шаблон, вместе с переменными, поместил в одну переменную.
Вот этот код работает.
// Create form shortcode
function get_jfc_form ($atts) {
$params = shortcode_atts(
array(
'wrapper_style' => '',
'uniqid' => uniqid(),
),
$atts
);
$form_wrapper_style = $params[ 'wrapper_style' ];
$uniqid = $params[ 'uniqid' ];
// Вместо include записал форму в переменную
$tpl = '
<div class="'.$form_wrapper_style.'" id="form_wrapper_id_'.$uniqid.'">
<form method="post" id="jfc_ajax_form_'.$uniqid.'">
<div class="form_input_text_wrapper">
<input type="text" name="jfc_phone" placeholder="Телефон" maxlength="20" />
</div>
<div class="form_input_submit_wrapper">
<input type="button" onclick="send_ajax_form(\''.$uniqid.'\')" value="Отправить" />
</div>
</form>
<div class="jfc_result_form" id="jfc_result_form_'.$uniqid.'"></div>
</div>
';
return $tpl;
}
add_shortcode( 'jfc_form', 'get_jfc_form' );
Но мне это не подходит, хотелось бы иметь возможность подключать разные шаблоны форм через include.
Что можно придумать в данной ситуации?