Функция шорткода wordpress отображает включенный файл над всем содержимым

Это моя функция:

            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');

Мой пост содержит текстовый контент с некоторыми изображениями NextGen и заканчивается:

'[producttable tablename = "бондинг-пластики-и-разнородные-подложки"]'

Это вызывает файл, содержащий HTML-код для таблицы. Но таблица отображается впереди содержимого. Он также отображается над заголовком на странице редактирования сообщений на панели инструментов Wordpress.

Если я удалю «включить» из строки «return include $ tablefile;» чтобы он возвращал $ tablefile; путь к файлу отображается в нижней части содержимого, как я хочу, чтобы таблица. '

Любая помощь приветствуется.

1
0
32
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

вы не должны возвращаться, включите функцию в php. например, ваш файл таблицы (pa-1.php):

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

и ваш шорткод:

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');
Ответ принят как подходящий

если вы рисуете таблицу в файле php, я предлагаю вам поместить информацию о таблице в массив, тогда:

  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');

вы можете нарисовать его в этой функции, затем вернуть или вернуть информацию, а затем нарисовать.

Это сработало. Я поместил всю таблицу в переменную '$ table =' <table> ... </table> '; 'Затем в моей функции require_once ($ tablefile);' и 'return $ table;' 'Спасибо!

twlack 14.09.2018 15:10

Вы можете сделать это двумя способами. Я не знаю, как выглядит ваш файл tablename.php, но я предполагаю, что это в основном плоский HTML.

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');

Буфер вывода PHP будет захватывать любой HTML-код, который нужно отобразить tablename.php, и помещать его в $ table_data, когда вы вызываете ob_get_contents () ;.

Запуск ob_end_clean () просто убирает за собой.

Другие вопросы по теме