Restituire una Pagina Template HTML con Funzione PHP

8 mar 2013, 15:07:09
Visualizzazioni: 46.8K
Voti: 11

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.

1
Commenti

Per cominciare, puoi SCRIVERE HTML semplice in un file PHP. Successivamente, devi creare una funzione nel tuo functions.php che includa/richieda questo specifico file, e tramite add_shortcode() impostare il tuo shortcode desiderato per richiamare la tua funzione.

tfrommen tfrommen
8 mar 2013 15:12:08
Tutte le risposte alla domanda 3
3
32

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.

8 mar 2013 17:12:03
Commenti

Perfetto! Funziona alla grande!

William William
8 mar 2013 18:34:09

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

patrics patrics
8 lug 2015 03:02:17

Wow...mi hai salvato la giornata..codice fantastico

Dipak Kumar Pusti Dipak Kumar Pusti
12 ott 2017 07:26:07
4

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>
8 mar 2013 15:18:17
Commenti

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

helgatheviking helgatheviking
8 mar 2013 15:21:46

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

William William
8 mar 2013 16:46:58

@helgatheviking - come funziona quella funzione?

William William
8 mar 2013 16:47:13

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.

helgatheviking helgatheviking
8 mar 2013 17:12:45
0

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');
19 ott 2022 20:53:22