Incluir archivo PHP en el Contenido usando [shortcode]

4

Aquí está lo que tengo

No estoy buscando nada sobre cómo incluir simplemente un archivo en el editor de contenido usando un código corto.

Por ejemplo, si quisiera incluir form.php dentro de mi página de contacto, ¿cómo lograría que esto sucediera utilizando un código corto?

A continuación se muestra cómo intentar trabajar sin éxito.

Cualquier ayuda sería apreciada!

// Shortcode implementation
function magic_stuff($atts) {

// turn on output buffering to capture script output

ob_start();

// include file (contents will get saved in output buffer)

include(TEMPLATEPATH.'/wp-content/themes/grainandmortar/inc_static/test.php');

// save and return the content that has been output

$content = ob_get_clean();
return $content;
}
//register the Shortcode handler
add_shortcode('magic', 'magic_stuff');
    
pregunta Eric Downs 20.04.2012 - 17:29

4 respuestas

2

He modificado parte del código de una antigua publicación del blog para hacer esto, y permitir que las cadenas de consulta se adjunten también al archivo.

El crédito original va a amberpanther.com , y resulta que hicieron un complemento fuera de esto, también.

//create the shortcode [include] that accepts a filepath and query string
//this function was modified from a post on www.amberpanther.com you can find it at the link below:
//http://www.amberpanther.com/knowledge-base/using-the-wordpress-shortcode-api-to-include-an-external-file-in-the-post-content/
//BEGIN amberpanther.com code
function include_file($atts) {
     //if filepath was specified
     extract(
          shortcode_atts(
               array(
                    'filepath' => 'NULL'
               ), $atts
          )
     );

     //BEGIN modified portion of code to accept query strings
     //check for query string of variables after file path
     if(strpos($filepath,"?")) {
          $query_string_pos = strpos($filepath,"?");
          //create global variable for query string so we can access it in our included files if we need it
          //also parse it out from the clean file name which we will store in a new variable for including
          global $query_string;
          $query_string = substr($filepath,$query_string_pos + 1);
          $clean_file_path = substr($filepath,0,$query_string_pos);     
          //if there isn't a query string
     } else {
          $clean_file_path = $filepath;
     }
     //END modified portion of code

     //check if the filepath was specified and if the file exists
     if ($filepath != 'NULL' && file_exists(get_stylesheet_directory_uri() . "/" . $clean_file_path)){
          //turn on output buffering to capture script output
          ob_start();
          //include the specified file
          include(TEMPLATEPATH.$clean_file_path);
          //assign the file output to $content variable and clean buffer
          $content = ob_get_clean();
          //return the $content
          //return is important for the output to appear at the correct position
          //in the content
          return $content;
     }
}
//register the Shortcode handler
add_shortcode('include', 'include_file');
//END amberpanther.com code
//shortcode with sample query string:
//[include filepath="/get-posts.php?format=grid&taxonomy=testing&term=stuff&posttype=work"]

Configuré el mío para extraerlo del uri de la hoja de estilo (para que funcione con temas secundarios y similares), pero puede ajustar ese código fácilmente para extraerlo desde cualquier lugar (incluidos los directorios de complementos), o eliminarlo por completo y solo usar La ruta completa al incluir el archivo. Incluso podría agregar un condicional con un carácter desencadenante al principio que le indique que use una ruta específica en función de cuál es el primer carácter del nombre del archivo, como usar "#" para el directorio de plantillas, etc.

Lo uso para arrastrar un archivo llamado get-posts.php que se encuentra en el directorio de mi plantilla y formatea la salida de varias publicaciones en función de una serie de parámetros proporcionados en la cadena de consulta. Me ahorra la necesidad de plantillas especiales porque puedo incluir el archivo, enviarlo en un formato y enviará las publicaciones con el marcado que he especificado en el archivo get-posts.php.

También permite que los clientes incluyan tipos de publicaciones personalizadas en publicaciones de blog reales en formatos específicos y es bastante práctico.

Hazme saber si necesitas aclaraciones sobre algo.

    
respondido por el Eric Allen 20.04.2012 - 23:51
3

Aquí hay otra forma de hacerlo, utilizando get_template_part de wordpress

function include_file($atts) {
     $a = shortcode_atts( array(
        'slug' => 'NULL',
       ), $atts );

      if($slug != 'NULL'){
        ob_start();
        get_template_part($a['slug']);
        return ob_get_clean();
      }
 }
 add_shortcode('include', 'include_file');

ejemplos:

[include slug="form"]

[include slug="sub-folder/filename_without_extension"]

    
respondido por el adedoy 21.01.2016 - 00:29
0

Descubrí que el código de inclusión escrito originalmente por AmberPanther no funcionó tan bien para mí, por lo que encontré otro plugin para wordpress que hace casi lo mismo. Se llama Include Me, por Stefano Lissa. El uso es bastante parecido a que escribes tu ruta al archivo, comenzando desde el directorio raíz de tu sitio.

Por ejemplo, dentro de tu página de WordPress escribirías:

[includeme file="wp-content/themes/your-theme/code/example-code.php"]

y dentro de tu archivo functions.php incluirías:

<?php

if (is_admin()) {
include dirname(__FILE__) . '/admin.php';

} else {

function includeme_call($attrs, $content = null) {

    if (isset($attrs['file'])) {
        $file = strip_tags($attrs['file']);
        if ($file[0] != '/')
            $file = ABSPATH . $file;

        ob_start();
        include($file);
        $buffer = ob_get_clean();
        $options = get_option('includeme', array());
        if (isset($options['shortcode'])) {
            $buffer = do_shortcode($buffer);
        }
    } else {
        $tmp = '';
        foreach ($attrs as $key => $value) {
            if ($key == 'src') {
                $value = strip_tags($value);
            }
            $value = str_replace('&amp;', '&', $value);
            if ($key == 'src') {
                $value = strip_tags($value);
            }
            $tmp .= ' ' . $key . '="' . $value . '"';
        }
        $buffer = '<iframe' . $tmp . '></iframe>';
    }
    return $buffer;
}

// Here because the funciton MUST be define before the "add_shortcode" since 
// "add_shortcode" check the function name with "is_callable".
add_shortcode('includeme', 'includeme_call');
}

por supuesto, también recomendaría instalar el complemento para que pueda aprovechar las actualizaciones. enlace

    
respondido por el user18275 07.11.2014 - 02:08
0

Bien, primero me desharía del búfer de salida.

Segundo cambio:

include(TEMPLATEPATH.'/wp-content/themes/grainandmortar/inc_static/test.php');

A

include( get_stylesheet_directory() . '/inc_static/test.php');

Finalmente,

Lea la documentación aquí: enlace

Necesitas devolver algo, si tu test.php no genera algo de forma retornable, vas a tener un mal momento.

Así que asegúrate de que test.php haga algo como:

$output = "STUFF"; // a variable you could return after include.
// or
function test() {
    // do stuff
    return $stuff; // a function that returns a value that you can call after include.
}

Luego, después de incluir su archivo test.php , simplemente devuelve $output o hace algo como return test(); .

    
respondido por el Sterling Hamilton 21.01.2016 - 00:43

Lea otras preguntas en las etiquetas