Как изменить заголовки для загрузки файла в WordPress, когда заголовки уже отправляются в предыдущем файле? - PullRequest
4 голосов
/ 26 января 2012

На одной из наших страниц WordPress мы хотели бы загрузить файл через браузер. Насколько я знаю, это делается путем изменения заголовка, чтобы страница считала, что это файл определенного типа (например, .txt). Тем не менее, как тема, так и десятки плагинов загружаются до загрузки этой страницы, и многие из них выводят какие-то данные или изменяют заголовок таким образом, что я постоянно получаю позорную ошибку заголовка:

Предупреждение: невозможно изменить информацию заголовка - заголовки уже отправлены (вывод начался в /home/keep/public_html/wp-content/themes/procyon/header.php:2) в /home/keep/public_html/wp-content/themes/procyon/functions.php на линии 97

Итак, как я могу обойти тот факт, что другие плагины изменяют информацию заголовка, прежде чем я хотел бы? Конечно, должен быть какой-то способ, так как другие плагины не имеют этой проблемы друг с другом.

Для тех из вас, кто ценит какие-то усилия, вот код, который я использую:

$tmp_handle = fopen('php://memory', 'r+');

foreach ($arr as $fields) {
    fputcsv($tmp_handle, $fields);
}

header('Content-type: text/csv');
header('Content-disposition: attachment;filename=MyVerySpecial.csv');
rewind($tmp_handle);

echo stream_get_contents($tmp_handle);

Буду очень признателен за помощь в этом вопросе, спасибо!

Ответы [ 2 ]

5 голосов
/ 26 января 2012

Если все, что вы хотите сделать, это заставить пользователя загрузить что-то, вам не нужно использовать систему шаблонов. Вы точно знаете, что ничего не было выведено до «template_redirect», поэтому вы можете использовать этот факт, чтобы написать что-то вроде этого:

add_action('template_redirect', 'download_page');
function download_page() {
    if($_GET['download'] == 'true') {
        //Output header information and the file content
        exit; // Stops Wordpress from executing anything else.
    }
}

Теперь, возможно, вам нужна система шаблонов для доставки файла, я не знаю, но в вашем описании это прямо не указано.

0 голосов
/ 26 января 2012

Сломай это из Wordpress.Вам нужно будет загрузить новый файл, такой как headers.php и ссылку на него из Wordpress.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...