У меня есть две функции:
core_function($atts) { (attributes) (core functions, a few loops, echoes, a lot of direct input) }
И вот как я показываю свою функцию с помощью буферизации вывода (да, я должен ее использовать!).
display_function($atts) { (attributes) $output = ob_start(); $output .= core_function($atts); $output .= ob_get_clean(); return $output; }
Все отлично, но возврат $ output показывает не только основные функции, но и «1» перед ними. Я не знаю, откуда этот «1». Когда я удаляю ob_start (); и ob_get_clean (); он исчезает. Поэтому я считаю, что выходной буфер каким-то образом добавляет эту цифру. Но как и почему? Это сырой «1», а не в абзаце и т. Д.
Нормальная display_function ($ atts) показывает, например:
<div>This is Core Function!</div>
И с выходной буферизацией он отображает:
1 <div>This is Core Function!</div>
Почему это происходит? Если это имеет какое-то отношение к моим функциям, я говорю снова – значение 1 отображается точно перед всем содержимым.
Это не так, как работает буферизация вывода. ob_start
возвращает TRUE или FALSE по завершении, поэтому вы объединяете кучу вещей, которые не следует конкатенировать. (То же самое касается вашего вызова core_function).
display_function($atts) { (attributes) ob_start(); core_function($atts); return ob_get_clean(); }
Должно сработать. Он включает буферизацию вывода, которая сохранит весь ваш выход (эхо и отпечатки и т. Д.). Вызов ob_get_clean будет возвращать содержимое вашего буферизованного вывода.