質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

解決済

WordPressの自作プラグインでのCSVダウンロード機能

mikeko0901
mikeko0901

総合スコア176

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1回答

0評価

1クリップ

453閲覧

投稿2022/02/23 13:43

WordPressの管理画面で、独自追加したテーブルを一覧で表示したり編集したりする機能をプラグインを作成して実装しています。

そこで、CSVダウンロード機能をつけたいのですがうまくできません。アドバイスいただけますと幸いです。

(現在)
イメージ説明

ダウンロードボタンをクリックすると

イメージ説明

何も起きません‥‥

コード

wp-content>plugins>test-crud-plugin>test-crud-plugin.php

<?php /* Plugin Name: TestCrudPlugin Plugin URI: Description: 試験用のアプリ Version: 1.0 Author: Ito */ require_once(plugin_dir_path(__FILE__) . 'test-crud-util.php'); require_once(plugin_dir_path(__FILE__) . 'test-crud-edit.php'); add_action('admin_menu', 'testCrudPluginMenu'); /* 管理画面呼び出し manage_options→administratorにすると権限でアクセスできなくなる*/ function testCrudPluginMenu() { add_menu_page('テストメニューだよ','申込一覧','manage_options', 'test-crud-plugin', 'testCrudPluginPage' , 'dashicons-database'); } /* 管理画面表示部 */ function testCrudPluginPage() { //editページ if(isset($_GET["edit"])) { testCrudEditPage(); } else if(isset($_GET["download"])) { //★ダウンロードボタンがクリックされた時の処理 add_action('init', function() { global $wpdb; $sql = "SELECT * FROM wp_test;"; $records = $wpdb->get_results($sql, ARRAY_A); $data = []; $i = 0; $data[$i] = [ //ヘッダーをセット "id", "name", "email", "日時" ]; foreach($records as $record) { $i++; $data[$i][] = $record["id"]; $data[$i][] = $record["name"]; $data[$i][] = $record["email"]; $data[$i][] = $record["created_at"]; } $file_name = "order.csv"; $fp = fopen('php://output', 'w'); header('Content-Type: application/octet-stream'); header("Content-Disposition: attachment; filename={$file_name}"); header('Content-Transfer-Encoding: binary'); // UTF-8からSJIS-winへ変換するフィルター stream_filter_append($fp, 'convert.iconv.UTF-8/CP932//TRANSLIT', STREAM_FILTER_WRITE); foreach ($data as $row) { fputcsv($fp, $row, ',', '"'); } fclose($fp); }); } else { //リストページ //wp_testテーブルの商品数を取得 global $wpdb; $sql = "SELECT * FROM wp_test;"; $records = $wpdb->get_results($sql, ARRAY_A); ?> <div class="wrap"> <h2>申込一覧</h2> <div class="postbox "> <button>新規追加</button> <?php print($_REQUEST['page']); ?> <button onclick="location.href='?page=test-crud-plugin'">申込一覧TOP</button> <button onclick="location.href='?page=test-crud-plugin&download'">ダウンロード</button> <div class="inside"> <div class="main"> <table class="wp-list-table widefat fixed striped table-view-list posts"> <thead> <tr> <th></th> <th>id</th> <th>お名前</th> <th>メール</th> <th>日時</th> </tr> </thead> <tbody> <?php if($records): foreach($records as $record): ?> <tr> <td><button onclick="location.href='?page=test-crud-plugin&edit=<?php print($record['id']); ?>'">編集</button></td> <td><?php print($record['id']); ?></td> <td><?php print($record['name']); ?></td> <td><?php print($record['email']); ?></td> <td><?php print($record['created_at']); ?></td> </tr> <?php endforeach; endif; ?> </tbody> </table> </div> </div> </div> </div> <?php } }

admin.php?page=test-crud-plugin&download
のように、パラメータに「download」がついた時はダウンロードさせる
というようにしています。
最初、

Cannot modify header information - headers already sent by

というエラーが出たので、CSVダウンロードの処理を、

add_action('init', function() {

で囲みました。
そうしましたら、headers already sent のエラーは出なくなりましたが、
キャプチャのようになりました。。

WordPressの管理画面内ではなく、通常のPHPプログラムとしては問題なくCSV出力できているものを元にして実装しています。

何卒、よろしくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。