Returnarea unui șablon HTML cu funcție PHP
Vreau să creez un formular pe care să-l pot insera în site-ul meu folosind un shortcode.
Ar fi foarte util dacă aș putea crea partea de HTML într-un fișier separat și apoi să o inserez cu un shortcode PHP (pentru a separa logica paginii de mecanismul de transformare în shortcode).
Cum aș putea face acest lucru?
-- Actualizare --
Iată ce am făcut: Am două fișiere. Unul numit 'profiletemplate.php' și unul numit 'scodes'. Ambele fac parte dintr-un plugin pe care îl creez pentru site-ul meu cu un fișier init.php care le inițializează. Iată conținutul lor:
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 // Șablon pentru shortcode-ul formularului meu ?>
<form>
Testare
</form>
Apoi folosesc shortcode-ul [testfield] pe o pagină din site-ul meu.
Actualizare 2
Această metodă funcționează, dar nu inserează HTML-ul unde este apelat shortcode-ul. În schimb, inserează conținutul în partea de sus a paginii (ca și cum aș fi folosit 'echo 'Testare'' în loc de 'return 'Testare'' într-o funcție.
Ceva ce am uitat în comentariul meu anterior a fost faptul că shortcode-urile returnează conținut, atât sugestia cu include
cât și alternativa mea get_template_part
vor afișa direct conținutul (ceea ce se întâmplă acum, conținutul apare în partea de sus a paginii în loc de locația unde este apelat shortcode-ul). Pentru a contracara acest lucru, trebuie să folosim bufferizarea ieșirii.
Definiți shortcode-ul în functions.php (sau în fișierul de funcții specifice site-ului).
function my_form_shortcode() {
ob_start();
get_template_part('my_form_template');
return ob_get_clean();
}
add_shortcode( 'my_form_shortcode', 'my_form_shortcode' );
Apoi, în directorul temei, aveți nevoie de un fișier numit my_form_template.php
care va fi încărcat oriunde plasați shortcode-ul.

Dacă încerci să faci același lucru într-un plugin, trebuie să folosești include. Vezi http://wordpress.stackexchange.com/a/124794/75817

Adaugă următoarele în functions.php:
function my_form_shortcode() {
include dirname( __FILE__ ) . 'my_form_template.php';
} // funcția my_form_shortcode
add_shortcode( 'my_form_shortcode', 'my_form_shortcode' );
Fișierul my_form_template.php:
<?php // Șablon pentru scurtcodul formularului meu ?>
<form ...>
CÂMPURI
</form>

Ai putea folosi și get_template_part()
în interiorul funcției tale de shortcode.

Am încercat să implementez soluția lui @t f - am adăugat o actualizare în postarea mea despre asta

Consultați codex-ul pentru o descriere a funcției get_template_part() și vedeți răspunsul meu pentru cum să o folosiți împreună cu shortcode-ul vostru.

Încearcă să pui tot codul tău între ob_start();
și return ob_get_clean();
și asta va rezolva problema cu conținutul shortcode-ului care apare în partea de sus, deoarece ob_
este un buffer care colectează tot codul anterior, îți execută operațiile, apoi continuă de unde a rămas.
Exemplu complet:
function subscribe_model_fn(){
ob_start();
// codul tău într-un fișier separat - va fi organizat corect
include(locate_template( 'library/general/subscribe_model.php', false, true));
return ob_get_clean();
}
add_shortcode('subscribe_model', 'subscribe_model_fn');
