Почему шорткод выводит контент перед редактором Elementor?

Здравствуйте. Пишу простой плагин обратной связи для 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.

Что можно придумать в данной ситуации?
  • Вопрос задан
  • 23 просмотра
Пригласить эксперта
Ответы на вопрос 1
artzolin
@artzolin
php, WordPress разработка сайтов zolin.digital
Потому что во втором правильно return, а в первом не правильно echo
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
08 мар. 2021, в 12:56
2000 руб./за проект
08 мар. 2021, в 12:35
50000 руб./за проект
08 мар. 2021, в 11:59
15000 руб./за проект