@Legal2019
Всё в имени моём... и радость и печаль...

Что не так с шоткодом?

Всем привет,
Есть такой шоткод:
add_shortcode('fbbuttons', 'show_fbbuttons'); // shotcode: [fbbuttons]
function show_fbbuttons(){
    $fbbuttons = require_once(TEMPLATEPATH . '/block-fbbuttons.php');
    return $fbbuttons;
}

Я не понимаю что нужно сделать чтобы после вывода этого файла в нужном месте не выводилась единица (1)
require_once - iclude = разницы 0, вывод есть с единицей. Я понимаю почему она появляется, но не знаю как сделать правильное подключение файла через шоткод.
Нужна помощь. Можно объяснить.
  • Вопрос задан
  • 51 просмотр
Решения вопроса 1
SeaInside
@SeaInside
15 лет пилю все эти штуки
Привет.
Нужно сделать так:
add_shortcode('fbbuttons', 'show_fbbuttons'); // shotcode: [fbbuttons]
function show_fbbuttons() {
  ob_start();
  require_once(TEMPLATEPATH . '/block-fbbuttons.php');
  $fbbuttons = ob_get_clean();

  return $fbbuttons;
}


Вероятнее всего, будет работать нормально, даже если не включать буферизацию, то есть:
add_shortcode('fbbuttons', 'show_fbbuttons'); // shotcode: [fbbuttons]
function show_fbbuttons(){
  require_once(TEMPLATEPATH . '/block-fbbuttons.php');

  return '';
}

Но так делать не принято, шорткод должен возвращать значение, а не выводить.

Ошибка в том, что include и require - это не функции, а управляющие конструкции языка (я бы вообще запретил их вызывать со скобками), и они не работают как функции. Вы результат require присваиваете переменной и его возвращаете - он и выводится.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы