Restituire una Pagina Template HTML con Funzione PHP
Voglio creare un form che posso inserire nel mio sito usando uno shortcode.
Sarebbe molto utile poter creare la parte HTML in un file separato e poi inserirla con uno shortcode PHP (per separare la logica della pagina dalla meccanica che lo trasforma in shortcode).
Come posso farlo?
-- Aggiornamento --
Ecco cosa ho fatto: Ho due file. Uno chiamato 'profiletemplate.php' e uno chiamato 'scodes'. Fanno entrambi parte di un plugin che sto creando per il mio sito con un init.php che li inizializza. Ecco il loro contenuto:
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 per il mio shortcode del form ?>
<form>
Test
</form>
Poi uso lo shortcode [testfield] su una pagina del mio sito.
Aggiornamento 2
Questo metodo funziona, ma non sta inserendo l'HTML dove viene chiamato lo shortcode. Invece sta inserendo il contenuto all'inizio della pagina (come se avessi scritto 'echo 'Testing'' invece di 'return 'Testing'' in una funzione.
Qualcosa che ho dimenticato nel mio commento precedente è che gli shortcode restituiscono contenuto, sia il suggerito include
che la mia alternativa get_template_part
emetteranno direttamente il contenuto (che è ciò che stai vedendo con il contenuto che appare in cima alla tua pagina invece che dove viene chiamato lo shortcode). Per contrastare questo dobbiamo usare il buffering dell'output.
Definisci lo shortcode nel tuo functions.php (o nel file delle funzioni specifiche del sito).
function my_form_shortcode() {
ob_start(); // Inizia il buffering dell'output
get_template_part('my_form_template'); // Carica il template del form
return ob_get_clean(); // Restituisce il contenuto bufferizzato e pulisce il buffer
}
add_shortcode( 'my_form_shortcode', 'my_form_shortcode' ); // Registra lo shortcode
Poi nella cartella del tuo tema ti serve un file chiamato my_form_template.php
che verrà caricato ovunque inserisci lo shortcode.

Se provi a fare la stessa cosa all'interno di un plugin devi usare include. Vedi http://wordpress.stackexchange.com/a/124794/75817

Aggiungi il seguente codice al tuo file 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' );
File my_form_template.php:
<?php // Template per lo shortcode del mio modulo ?>
<form ...>
CAMPI
</form>

Potresti anche usare get_template_part()
all'interno della tua funzione shortcode.

Ho provato a implementare la soluzione di @t f - ho aggiunto un aggiornamento al mio post a riguardo

Consulta il codex per una descrizione di get_template_part() e vedi la mia risposta per capire come usarlo in combinazione con il tuo shortcode.

prova a inserire tutto il tuo codice tra ob_start();
e return ob_get_clean();
e questo risolverà il problema del contenuto dello shortcode che appare in cima perché ob_
è un buffer che raccoglie tutto il codice precedente, esegue le tue operazioni e poi continua da dove si era fermato.
esempio completo.
function subscribe_model_fn(){
ob_start();
// il tuo codice in un file separato sarà felice e organizzato
include(locate_template( 'library/general/subscribe_model.php',false,true));
return ob_get_clean();
}
add_shortcode('subscribe_model', 'subscribe_model_fn');
