Esta es mi función:

            function include_product_table( $atts ) {
            $a = shortcode_atts( array(
            'tablename' => ''
            ), $atts );
            $tablefile = '/home/panacol1/data/wp-content/themes/Divi-child/producttables/pt-'.$a[ 'tablename' ].'.php';

            return include $tablefile;

            }
            add_shortcode('producttable', 'include_product_table');

Mi publicación contiene contenido de texto con algunas imágenes de NextGen y luego termina con:

'[producttable tablename = "bonding-plastics-and-dissimilar-substrates"]'

Que llama a un archivo que contiene el HTML para una tabla. Pero la tabla se muestra por delante del contenido. También se muestra sobre el título en la página de edición de publicaciones en el Panel de Wordpress.

Si elimino 'include' de la línea 'return include $ tablefile;' para hacerlo 'return $ tablefile;' la ruta al archivo se muestra en la parte inferior del contenido como quiero que aparezca la tabla ".

Cualquier ayuda es apreciada.

1
twlack 13 sep. 2018 a las 22:13

3 respuestas

La mejor respuesta

Si dibuja la tabla en el archivo php, le sugiero que coloque la información de la tabla en la matriz y luego:

  function include_product_table( $atts ) {
        $a = shortcode_atts( array(
        'tablename' => ''
        ), $atts );
        $tablefile = '/home/panacol1/data/wp-content/themes/Divi-child/producttables/pt-'.$a[ 'tablename' ].'.php';

        require_once($tablefile);

        table_information = function_in_your_php_file_return_table_information();

        return table_information;

        }
        add_shortcode('producttable', 'include_product_table');

Puede dibujarlo en esta función y luego devolverlo o devolver información y luego dibujarlo.

0
amir solati 13 sep. 2018 a las 19:37

Puedes hacer esto de dos maneras. No sé cómo se ve su archivo tablename.php, pero supongo que es básicamente HTML plano.

function include_product_table( $atts ) {
    $a = shortcode_atts( array(
      'tablename' => ''
    ), $atts );
    $tablefile = ABSPATH . '/wp-content/themes/Divi-child/producttables/pt-'.$a[ 'tablename' ].'.php'; // filepath relative to WP install path.
    if (!is_file($tablefile)) { 
          // Bail out if the file doesn't exist
          return false;
    }

    ob_start();
    include $tablefile;
    $table_data = ob_get_contents();
    ob_end_clean();

    return $table_data;
}
add_shortcode('producttable', 'include_product_table');

Un búfer de salida PHP capturará cualquier HTML que el nombre de tabla.php quiera mostrar y lo colocará en $ table_data cuando llame a ob_get_contents () ;.

Ejecutar ob_end_clean () es solo limpiar después de ti.

1
incredimike 13 sep. 2018 a las 22:59

No deberías regresar, incluye la función en php. por ejemplo su archivo de tabla (pa-1.php):

<?php
function p_1(){
return "Hi";
}
?>

Y tu shortcode:

function include_product_table( $atts ) {
            $a = shortcode_atts( array(
            'tablename' => ''
            ), $atts );
            $tablefile = get_template_directory().'/Divi-child/producttables/pt-'.$a[ 'tablename' ].'.php';

 include $tablefile;
$function_name = "p_".$a[ 'tablename' ];
return $function_name();

            }
            add_shortcode('producttable', 'include_product_table');
0
Mehrshad Darzi 13 sep. 2018 a las 19:28