Вернуть страницу шаблона HTML с функцией PHP

10

Я хочу создать форму, которую я могу использовать шорткод для вставки на мой сайт.

Было бы очень хорошо, если бы я мог создать 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 // Template for my form shortcode ?>
<form>
Testing
</form>

Затем я использую шорткод [testfield] на странице моего сайта.

Обновление 2

Таким образом, этот метод работает, но он не вставляет HTML-код, где вызывается шорткод. Вместо этого он просто вставляет содержимое вверху страницы (как если бы я сказал «эхо-тестирование» вместо «вернуть тестирование» в функцию).

Уильям
источник
Ну, во-первых, вы можете написать простой HTML в файле PHP. Затем вам нужно написать функцию, functions.phpкоторая требует / включает этот определенный файл, и add_shortcode()установить желаемый шорткод для вызова вашей функции.
От

Ответы:

24

Что-то, что я забыл в своем предыдущем комментарии, было то, что шорткоды возвращают контент, и предлагаемый, 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который будет загружен везде, где вы поместите шорткод.

helgatheviking
источник
Отлично! Это работает сказочно!
Уильям
Если вы попытаетесь сделать то же самое в плагине, вам нужно использовать include. См. Wordpress.stackexchange.com/a/124794/75817
patrics
Ничего себе ... спас мой день .. потрясающий код
dipak_pusti
2

Добавьте следующее в ваши functions.php :

function my_form_shortcode() {
    include dirname( __FILE__ ) . 'my_form_template.php';
} // function my_form_shortcode
add_shortcode( 'my_form_shortcode', 'my_form_shortcode' );

Файл my_form_template.php :

<?php // Template for my form shortcode ?>
<form ...>
    FIELDS
</form>
tfrommen
источник
1
Вы также можете использовать get_template_part()внутри функции шорткода.
helgatheviking
Я попытался реализовать решение @ tf - я добавил в свой пост обновление об этом
Уильям
@helgatheviking - как эта функция работает?
Уильям
Смотрите кодекс для описания get_template_part () и посмотрите мой ответ о том, как использовать его в сочетании с вашим шорткодом.
helgatheviking