Devolver página de plantilla HTML con función PHP

10

Quiero crear un formulario que pueda usar un shortcode para insertar en mi sitio.

Sería realmente bueno si pudiera crear la parte HTML en un archivo separado y luego insertarlo con un código corto PHP (para separar la lógica de la página de la mecánica de convertirla en un código corto).

¿Cómo podría hacer esto?

- Actualización -

Esto es lo que he hecho: tengo dos archivos. Uno llamado 'profiletemplate.php' y otro llamado 'scodes'. Ambos son parte de un complemento que estoy haciendo para mi sitio con un init.php que los inicializa. Aquí está su contenido:

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 for my form shortcode ?>
<form>
Testing
</form>

Luego uso el shortcode [testfield] en una página de mi sitio.

Actualización 2

Entonces, este método está funcionando, pero no está insertando el HTML donde se llama el shortcode. En cambio, solo está insertando el contenido en la parte superior de la página (como si dijera 'echo' Testing '' en lugar de 'return' Testing '' en una función.

Guillermo
fuente
Bueno, para empezar, PUEDES escribir HTML sin formato en un archivo PHP. Luego tiene que escribir una función en su functions.phparchivo que requiera / incluya este cierto archivo, y mediante la add_shortcode()configuración de su shortcode deseado para llamar a su función.
tfrommen

Respuestas:

24

Algo que olvidé en mi comentario anterior fue que los códigos abreviados devuelven contenido, tanto la sugerencia includecomo mi alternativa get_template_partgenerarán directamente el contenido (que es lo que está viendo con el contenido que aparece en la parte superior de su página en lugar de donde se llama el código abreviado). Para contrarrestar esto, debemos usar el búfer de salida .

Defina el código abreviado en su functions.php (o el archivo de funciones específicas de su sitio ).

function my_form_shortcode() {
    ob_start();
    get_template_part('my_form_template');
    return ob_get_clean();   
} 
add_shortcode( 'my_form_shortcode', 'my_form_shortcode' );

Luego, en su carpeta de temas, necesita un archivo llamado my_form_template.phpque se cargará en cualquier lugar donde coloque el shortcode.

helgatheviking
fuente
¡Perfecto! ¡Esto funciona fabulosamente!
William
Si intenta hacer lo mismo dentro de un complemento, debe usar include. Ver wordpress.stackexchange.com/a/124794/75817
patrics
Wow ... me salvó el día ... código
impresionante
2

Agregue lo siguiente a su 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' );

Archivo my_form_template.php :

<?php // Template for my form shortcode ?>
<form ...>
    FIELDS
</form>
tfrommen
fuente
1
También puede usar get_template_part()dentro de su función de shortcode.
helgatheviking
Intenté implementar la solución de @ tf - agregué una actualización a mi publicación al respecto
William
@helgatheviking: ¿cómo funciona esa función?
William
Vea el códice para obtener una descripción de get_template_part () y vea mi respuesta sobre cómo usarlo junto con su código corto.
helgatheviking