Возврат HTML шаблона страницы с помощью PHP функции
Я хочу создать форму, которую смогу вставлять на сайт с помощью шорткода.
Было бы очень удобно создать HTML часть в отдельном файле и затем вставлять её с помощью PHP шорткода (чтобы отделить логику страницы от механики создания шорткода).
Как это можно сделать?
-- Обновление --
Вот что я сделал: У меня есть два файла. Один называется 'profiletemplate.php', а другой 'scodes'. Оба являются частью плагина, который я создаю для своего сайта, с файлом init.php, который их инициализирует. Вот их содержимое:
init.php
<?php
require_once(dirname(__FILE__).'/pages/scodes.php');
?>
scodes.php
function jf_testcode() {
include dirname(__FILE__) . 'profiletemplate.php';
}
add_shortcode('testfield', 'jf_testcode');
profiletemplate.php
<?php // Шаблон для моего шорткода формы ?>
<form>
Тестирование
</form>
Затем я использую шорткод [testfield] на странице моего сайта.
Обновление 2
Итак, этот метод работает, но он не вставляет HTML в то место, где вызывается шорткод. Вместо этого он просто вставляет содержимое в верхней части страницы (как если бы я написал 'echo 'Testing'' вместо 'return 'Testing'' в функции.
В моем предыдущем комментарии я забыл упомянуть, что шорткоды возвращают контент, тогда как предложенный include
и мой альтернативный вариант get_template_part
выводят контент напрямую (из-за этого контент появляется вверху страницы, а не там, где вызывается шорткод). Чтобы избежать этого, необходимо использовать буферизацию вывода.
Определите шорткод в файле functions.php (или в специальном файле функций вашего сайта).
function my_form_shortcode() {
ob_start();
get_template_part('my_form_template');
return ob_get_clean();
}
add_shortcode( 'my_form_shortcode', 'my_form_shortcode' );
Затем в папке вашей темы должен находиться файл с именем my_form_template.php
, который будет загружаться везде, где вы разместите шорткод.

Если вы пытаетесь сделать то же самое внутри плагина, вам нужно использовать include. Смотрите http://wordpress.stackexchange.com/a/124794/75817

Добавьте следующий код в ваш файл functions.php:
function my_form_shortcode() {
include dirname( __FILE__ ) . 'my_form_template.php';
} // функция my_form_shortcode
add_shortcode( 'my_form_shortcode', 'my_form_shortcode' );
Файл my_form_template.php:
<?php // Шаблон для шорткода формы ?>
<form ...>
ПОЛЯ ФОРМЫ
</form>

Вы также можете использовать get_template_part()
внутри вашей функции шорткода.

Я попробовал реализовать решение @t f - я добавил обновление в свой пост об этом

Смотрите codex для описания функции get_template_part() и мой ответ о том, как использовать её вместе с вашим шорткодом.

Попробуйте поместить весь ваш код между ob_start();
и return ob_get_clean();
Это решит проблему, когда содержимое шорткода отображается вверху, так как ob_
- это буфер, который собирает весь предыдущий код, выполняет ваши операции, а затем продолжает с того места, где остановился.
Полный пример:
function subscribe_model_fn(){
ob_start();
// ваш код в отдельном файле будет обработан корректно и упорядочен
include(locate_template( 'library/general/subscribe_model.php',false,true));
return ob_get_clean();
}
add_shortcode('subscribe_model', 'subscribe_model_fn');
