Возврат HTML шаблона страницы с помощью PHP функции

8 мар. 2013 г., 15:07:09
Просмотры: 46.8K
Голосов: 11

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

Было бы очень удобно создать 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'' в функции.

1
Комментарии

Для начала, вы МОЖЕТЕ писать обычный HTML в PHP-файле. Затем вам нужно написать функцию в вашем functions.php, которая подключает (includes/requires) этот конкретный файл, и с помощью add_shortcode() создать нужный шорткод для вызова вашей функции.

tfrommen tfrommen
8 мар. 2013 г. 15:12:08
Все ответы на вопрос 3
3
32

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

8 мар. 2013 г. 17:12:03
Комментарии

Идеально! Это работает просто замечательно!

William William
8 мар. 2013 г. 18:34:09

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

patrics patrics
8 июл. 2015 г. 03:02:17

Вау... спасло мой день.. потрясающий код

Dipak Kumar Pusti Dipak Kumar Pusti
12 окт. 2017 г. 07:26:07
4

Добавьте следующий код в ваш файл 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>
8 мар. 2013 г. 15:18:17
Комментарии

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

helgatheviking helgatheviking
8 мар. 2013 г. 15:21:46

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

William William
8 мар. 2013 г. 16:46:58

@helgatheviking - как работает эта функция?

William William
8 мар. 2013 г. 16:47:13

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

helgatheviking helgatheviking
8 мар. 2013 г. 17:12:45
0

Попробуйте поместить весь ваш код между 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');
19 окт. 2022 г. 20:53:22