Returnarea unui șablon HTML cu funcție PHP

8 mar. 2013, 15:07:09
Vizualizări: 46.8K
Voturi: 11

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.

1
Comentarii

Pentru început, POȚI scrie HTML simplu într-un fișier PHP. Apoi, trebuie să scrii o funcție în fișierul tău functions.php care să includă/require acel fișier specific, iar prin intermediul add_shortcode() să configurezi shortcode-ul dorit pentru a apela funcția ta.

tfrommen tfrommen
8 mar. 2013 15:12:08
Toate răspunsurile la întrebare 3
3
32

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.

8 mar. 2013 17:12:03
Comentarii

Perfect! Funcționează minunat!

William William
8 mar. 2013 18:34:09

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

patrics patrics
8 iul. 2015 03:02:17

Wow...mi-ai salvat ziua..cod minunat

Dipak Kumar Pusti Dipak Kumar Pusti
12 oct. 2017 07:26:07
4

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

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

helgatheviking helgatheviking
8 mar. 2013 15:21:46

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

William William
8 mar. 2013 16:46:58

@helgatheviking - cum funcționează acea funcție?

William William
8 mar. 2013 16:47:13

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.

helgatheviking helgatheviking
8 mar. 2013 17:12:45
0

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