PR

CSVデータをWordPressに取り込む方法

おそらくブログという個人メディアは無くなるんじゃないかと踏んでいるのですが、せめて少しでも使い勝手を良くしようと「攻略サイトみたいにユーザーサイドでデータの抽出や操作ができるようになったらいいな」と考えたところ。

ChatGPTが登場して素人でもJavaScriptやHTMLの編集が簡単になったので、作れる機能はなるべく搭載してみようと思います。

前の記事WordPressでゲーム攻略サイト「カスタムフィールドを作る」はこちら。

WordPressでゲーム攻略サイト「カスタムフィールドを作る」
WordPressでゲーム攻略サイトを作る際に役立つカスタムフィールドの作成方法を解説します。カスタム投稿タイプやメタボックスを活用し、キャラクターや武器データを効率的に管理・表示する手法を紹介。データベース構築が簡単になります。

ChatGPTに生成してもらった基礎編:最初のページはこちら。

ChatGPT入門ガイド: これだけ知っておけばOK!
ChatGPT入門ガイドでは、AI会話エンジンの基本概念や使い方をわかりやすく解説。無料プランと有料プランの違いやAPI利用方法まで網羅。これであなたもChatGPTの達人へ!
スポンサーリンク

WordPressにExcelやNumbersの表データをインポートする

GPT-4.0との会話ログみたいなものです。

プラグインを利用する場合

WordPressでNumbersやExcelの表データを読み込んで、キャラクターのステータス(HP, MP, 攻撃力, 防御力, スピード)を登録する方法を実現するには、以下の手順が必要です。

  1. プラグインのインストール: まず、WordPressに表データをインポートするためのプラグインをインストールする必要があります。有名なプラグインとして「WP All Import」があります。これを使って、CSVやXML形式のデータをインポートできます。
  2. ExcelまたはNumbersファイルの準備: NumbersやExcelで作成した表データをCSV形式に変換します。Excelでは「名前を付けて保存」で、Numbersでは「書き出し」機能でCSV形式を選択して変換できます。
  3. CSVファイルのインポート: WP All Importプラグインを使ってCSVファイルをインポートします。インポート時に、CSVの各列をカスタムフィールドとしてマッピングすることができます。これにより、キャラクターのステータス(HP, MP, 攻撃力, 防御力, スピード)がカスタムフィールドとして登録されます。
  4. テーマのカスタマイズ: インポートしたデータを表示するために、WordPressのテーマをカスタマイズします。テンプレートファイル(たとえばsingle.phpやarchive.php)にカスタムフィールドを表示するコードを追加します。例えば、HPを表示するには以下のようなコードが使用できます。
php

<?php echo get_post_meta( get_the_ID(), 'HP', true ); ?>

これを繰り返して、他のパラメータも表示できます。

これらの手順を踏むことで、NumbersやExcelで作成した表データを読み込んで、キャラクターのステータスを登録・表示することができます。ただし、WP All Importプラグインは有料版であることに注意してください。無料でインポート機能を持つプラグインも存在しますが、機能面で制限がある場合があります。

プラグインを使わない場合にやるべきこと

プラグインを使わずにPHPを使用してCSVデータをインポートし、WordPressのデータベースに登録することができます。以下の手順で実現できます。

  1. CSVファイルをアップロードする機能を作成: まず、WordPressの管理画面にCSVファイルをアップロードするフォームを作成します。functions.phpに以下のコードを追加して、メディアアップローダーにCSVファイルをアップロードできるようにします。
php

function my_myme_types($mime_types){
    $mime_types['csv'] = 'text/csv';
    return $mime_types;
}
add_filter('upload_mimes', 'my_myme_types', 1, 1);
  1. CSVファイルを読み込むコードを作成: 次に、アップロードされたCSVファイルを読み込むためのコードを作成します。以下のコードを適切な場所(例えば、カスタムテンプレートファイル)に追加します。
php

$csv_file = 'path/to/your/uploaded/csvfile.csv'; // アップロードされたCSVファイルのパスを指定
if (($handle = fopen($csv_file, 'r')) !== false) {
    while (($data = fgetcsv($handle, 1000, ',')) !== false) {
        // $data[0] = HP, $data[1] = MP, $data[2] = 攻撃力, $data[3] = 防御力, $data[4] = スピード
    }
    fclose($handle);
}
  1. データをデータベースに登録するコードを作成: CSVファイルのデータをデータベースに登録するためのコードを追加します。以下のコードを、前の手順で作成したCSVファイルを読み込むコードのwhileループの中に追加します。
php

$post_id = wp_insert_post(array(
    'post_title'    => 'Character Name or Title', // キャラクター名やタイトルを指定
    'post_content'  => 'Description or content', // 説明文やコンテンツを指定
    'post_status'   => 'publish', // 公開ステータスを指定
    'post_author'   => 1, // 投稿者のIDを指定
    'post_type'     => 'post', // 投稿タイプを指定
));

// カスタムフィールドにデータを追加
update_post_meta($post_id, 'HP', $data[0]);
update_post_meta($post_id, 'MP', $data[1]);
update_post_meta($post_id, '攻撃力', $data[2]);
update_post_meta($post_id, '防御力', $data[3]);
update_post_meta($post_id, 'スピード', $data[4]);

これで、アップロードされたCSVファイルのデータをデータベースに登録できます。

ただし、この方法はセキュリティやエラーハンドリングに関して最適化されていません。本番環境で使用する場合は、ファイルの検証やエラーチェック、適切な権限設定などを実施してください。

  1. データを表示するコードを作成: 最後に、データベースに登録されたデータを表示するためのコードを追加します。以下のようなコードを、適切なテンプレートファイル(例えばsingle.phpやarchive.php)に追加してください。
php

<?php echo get_post_meta( get_the_ID(), 'HP', true ); ?><br>
<?php echo get_post_meta( get_the_ID(), 'MP', true ); ?><br>
<?php echo get_post_meta( get_the_ID(), '攻撃力', true ); ?><br>
<?php echo get_post_meta( get_the_ID(), '防御力', true ); ?><br>
<?php echo get_post_meta( get_the_ID(), 'スピード', true ); ?>

このコードにより、登録されたキャラクターのステータス(HP, MP, 攻撃力, 防御力, スピード)が表示されます。

これらの手順を踏むことで、プラグインを使わずにCSVデータをインポートし、WordPressのデータベースに登録・表示することができます。ただし、コードはあくまで基本的なものであり、実際の使用には最適化やセキュリティ対策が必要です。

コードを組み合わせる

whileループの中でデータをデータベースに登録するコードを記述すると、以下のようになります。

まず、CSVファイルを読み込むコードとデータをデータベースに登録するコードを組み合わせます。

php

$csv_file = 'path/to/your/uploaded/csvfile.csv'; // アップロードされたCSVファイルのパスを指定
if (($handle = fopen($csv_file, 'r')) !== false) {
    while (($data = fgetcsv($handle, 1000, ',')) !== false) {
        // $data[0] = HP, $data[1] = MP, $data[2] = 攻撃力, $data[3] = 防御力, $data[4] = スピード

        $post_id = wp_insert_post(array(
            'post_title'    => 'Character Name or Title', // キャラクター名やタイトルを指定
            'post_content'  => 'Description or content', // 説明文やコンテンツを指定
            'post_status'   => 'publish', // 公開ステータスを指定
            'post_author'   => 1, // 投稿者のIDを指定
            'post_type'     => 'post', // 投稿タイプを指定
        ));

        // カスタムフィールドにデータを追加
        update_post_meta($post_id, 'HP', $data[0]);
        update_post_meta($post_id, 'MP', $data[1]);
        update_post_meta($post_id, '攻撃力', $data[2]);
        update_post_meta($post_id, '防御力', $data[3]);
        update_post_meta($post_id, 'スピード', $data[4]);
    }
    fclose($handle);
}

このコードにより、CSVファイルの各行ごとにデータベースに登録されます。ただし、キャラクター名やタイトル、説明文やコンテンツを固定値としていますが、実際にはCSVファイル内のデータに応じて動的に変更することが望ましいです。また、セキュリティやエラーハンドリングに関して最適化されていません。本番環境で使用する場合は、ファイルの検証やエラーチェック、適切な権限設定などを実施してください。

CSVファイルのアップロード手順

キャラクター名も登録できるようにする

CSVファイルを作成する際、1列目にHP、2列目にMPといった順番でデータを配置しておくことで、アップロード時に列の順番に従ってデータが自動で振り分けられます。ただし、現在のコードでは、CSVファイルの各行が1つのキャラクターに対応することを想定しています。

例えば、以下のようなCSVファイルを作成します。

Copy code100,50,30,20,10
200,100,60,40,20

このCSVファイルでは、1行目がキャラクター1のステータス(HP: 100, MP: 50, 攻撃力: 30, 防御力: 20, スピード: 10)、2行目がキャラクター2のステータス(HP: 200, MP: 100, 攻撃力: 60, 防御力: 40, スピード: 20)となります。

このCSVファイルをアップロードすると、コードによって各行が読み込まれ、各キャラクターのステータスがデータベースに登録されます。

ただし、現在のコードでは、キャラクター名やタイトル、説明文やコンテンツを固定値としていますが、実際にはCSVファイル内のデータに応じて動的に変更することが望ましいです。たとえば、CSVファイルにキャラクター名を追加し、以下のようにデータを配置することができます。

Copy codeCharacter1,100,50,30,20,10
Character2,200,100,60,40,20

この場合、コードを修正して、キャラクター名もCSVファイルから読み込むようにする必要があります。以下のように$data[0]をキャラクター名として使用し、その他のインデックスを1つずつずらします。

php

// 省略
$post_id = wp_insert_post(array(
    'post_title'    => $data[0], // キャラクター名をCSVファイルから読み込む
    'post_content'  => 'Description or content',
    'post_status'   => 'publish',
    'post_author'   => 1,
    'post_type'     => 'post',
));

update_post_meta($post_id, 'HP', $data[1]);
update_post_meta($post_id, 'MP', $data[2]);
update_post_meta($post_id, '攻撃力', $data[3]);
update_post_meta($post_id, '防御力', $data[4]);
update_post_meta($post_id, 'スピード', $data[5]);

この修正により、CSVファイルの各行が1つのキャラクターに対応し、キャラクター名やステータスがデータベースに登録されます。

このようにして、1項目(キャラクター1人)ごとにCSVファイルを作成するのではなく、1つのCSVファイルに複数のキャラクターのデータを含めることができます。これにより、一度に複数のキャラクターのデータをアップロードし、データベースに登録することが可能になります。

データの管理方法

データ管理については、WordPressの投稿ページを編集してデータを簡単に更新することができます。カスタムフィールドの値は、投稿編集画面のカスタムフィールド欄で編集できます。ただし、カスタムフィールド欄が表示されていない場合は、編集画面の右上にある「オプション」タブから「カスタムフィールド」を有効化してください。

また、CSV以外の登録方法も作成することができます。例えば、専用のフォームを作成して、そのフォームを使ってキャラクターのデータを入力・更新することができます。

以下は、カスタムテンプレートファイルに追加できる、キャラクターデータを入力・更新するための簡単なフォームの例です。

html

<form action="<?php echo esc_url( admin_url('admin-post.php') ); ?>" method="post">
    <input type="hidden" name="action" value="update_character_data">
    <label for="character_name">Character Name:</label>
    <input type="text" name="character_name" id="character_name">
    <label for="hp">HP:</label>
    <input type="number" name="hp" id="hp">
    <label for="mp">MP:</label>
    <input type="number" name="mp" id="mp">
    <label for="attack">Attack:</label>
    <input type="number" name="attack" id="attack">
    <label for="defense">Defense:</label>
    <input type="number" name="defense" id="defense">
    <label for="speed">Speed:</label>
    <input type="number" name="speed" id="speed">
    <input type="submit" value="Update Character Data">
</form>

次に、functions.phpに以下のコードを追加して、フォームから送信されたデータを処理します。

php

function update_character_data() {
    if (isset($_POST['character_name'])) {
        $character_name = sanitize_text_field($_POST['character_name']);
        $hp = sanitize_text_field($_POST['hp']);
        $mp = sanitize_text_field($_POST['mp']);
        $attack = sanitize_text_field($_POST['attack']);
        $defense = sanitize_text_field($_POST['defense']);
        $speed = sanitize_text_field($_POST['speed']);

        // キャラクター名を元に、既存の投稿を検索
        $args = array(
            'post_type' => 'post',
            'title' => $character_name,
            'post_status' => 'publish',
        );
        $query = new WP_Query($args);

        if ($query->have_posts()) {
            while ($query->have_posts()) {
                $query->the_post();
                $post_id = get_the_ID();

                // カスタムフィールドを更新
                update_post_meta($post_id, 'HP', $hp);
                update_post_meta($post_id, 'MP', $mp);
                update_post_meta($post_id, '攻撃力', $attack);
update_post_meta($post_id, '防御力', $defense);
update_post_meta($post_id, 'スピード', $speed);
}
wp_reset_postdata();
} else {
// 新しいキャラクターデータを登録
$post_id = wp_insert_post(array(
'post_title' => $character_name,
'post_content' => 'Description or content',
'post_status' => 'publish',
'post_author' => 1,
'post_type' => 'post',
));

        // カスタムフィールドを登録
        update_post_meta($post_id, 'HP', $hp);
        update_post_meta($post_id, 'MP', $mp);
        update_post_meta($post_id, '攻撃力', $attack);
        update_post_meta($post_id, '防御力', $defense);
        update_post_meta($post_id, 'スピード', $speed);
    }
}
// リダイレクト
wp_redirect($_SERVER['HTTP_REFERER']);
exit;
}
add_action('admin_post_update_character_data', 'update_character_data');
add_action('admin_post_nopriv_update_character_data', 'update_character_data');

このコードは、フォームから送信されたデータを受け取り、キャラクター名を元に既存の投稿を検索します。投稿が見つかった場合、カスタムフィールドの値を更新します。見つからなかった場合、新しいキャラクターデータを登録します。

この方法を使用することで、CSVファイルを使用せずにキャラクターデータを登録・更新することができます。また、フォームはフロントエンドや管理画面に表示できるため、簡単にデータを編集できるようになります。

投稿時のID

今回作成したカスタムフィールドのデータは、キャラクター用の投稿ページ(post)のデータとして保管されています。投稿ページは、それぞれ固有のID(post_id)で管理されており、このIDを使ってデータを呼び出すことができます。

データを呼び出す際には、get_post_meta()関数を使用して、指定した投稿IDとカスタムフィールド名に対応するデータを取得できます。

例えば、投稿IDが$post_idで、HPのデータを取得したい場合は、以下のように記述します。

phpCopy code$hp = get_post_meta($post_id, 'HP', true);

投稿ページ(キャラクターデータ)を一覧表示する場合や、特定のキャラクター名で検索する場合は、WP_Queryクラスを使用してデータを取得できます。以下は、キャラクター名で検索し、データを表示する例です。

php

$character_name = 'CharacterA'; // 例として、CharacterAという名前のキャラクターを検索

$args = array(
    'post_type' => 'post',
    'title' => $character_name,
    'post_status' => 'publish',
);

$query = new WP_Query($args);

if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        $post_id = get_the_ID();
        $hp = get_post_meta($post_id, 'HP', true);
        $mp = get_post_meta($post_id, 'MP', true);
        $attack = get_post_meta($post_id, '攻撃力', true);
        $defense = get_post_meta($post_id, '防御力', true);
        $speed = get_post_meta($post_id, 'スピード', true);

        // データを表示
        echo 'Character Name: ' . get_the_title() . '<br>';
        echo 'HP: ' . $hp . '<br>';
        echo 'MP: ' . $mp . '<br>';
        echo 'Attack: ' . $attack . '<br>';
        echo 'Defense: ' . $defense . '<br>';
        echo 'Speed: ' . $speed . '<br><br>';
    }
    wp_reset_postdata();
} else {
    echo 'No characters found.';
}

これにより、指定したキャラクター名のデータを取得し、表示することができます。

CSVでゲームデータをインポートする方法まとめ

ここまでの内容をまとめます。

  • キャラクター用の投稿ページとして保管する
  • CSVデータをインポートできる
  • CSVデータはカスタムフィールドで投稿される
  • 一番左の列にキャラクター名を配置する
  • HP,MP,攻撃力,防御力,スピード,説明文のパラメータを保管する
  • 既存のキャラクターの重複を検索し更新できる

これまで提示してもらったコードをもとに、functions.php記述用のコード、カスタムテンプレート用のコード、アップロード用フォームのコードごとにそれぞれ記述してください。

functions.php用のコード

phpCopy code// CSVファイルをインポートし、カスタムフィールドでデータを投稿
function import_csv_to_custom_fields() {
    if (isset($_FILES['csv_import'])) {
        $csv_file = $_FILES['csv_import']['tmp_name'];
        $handle = fopen($csv_file, 'r');

        while (($data = fgetcsv($handle, 0, ',')) !== FALSE) {
            $character_name = $data[0];
            $hp = $data[1];
            $mp = $data[2];
            $attack = $data[3];
            $defense = $data[4];
            $speed = $data[5];
            $description = $data[6];

            $args = array(
                'post_type' => 'post',
                'title' => $character_name,
                'post_status' => 'publish',
            );
            $query = new WP_Query($args);

            if ($query->have_posts()) {
                while ($query->have_posts()) {
                    $query->the_post();
                    $post_id = get_the_ID();

                    // カスタムフィールドを更新
                    update_post_meta($post_id, 'HP', $hp);
                    update_post_meta($post_id, 'MP', $mp);
                    update_post_meta($post_id, '攻撃力', $attack);
                    update_post_meta($post_id, '防御力', $defense);
                    update_post_meta($post_id, 'スピード', $speed);
                    update_post_meta($post_id, '説明文', $description);
                }
                wp_reset_postdata();
            } else {
                // 新しいキャラクターデータを登録
                $post_id = wp_insert_post(array(
                    'post_title'    => $character_name,
                    'post_content'  => $description,
                    'post_status'   => 'publish',
                    'post_author'   => 1,
                    'post_type'     => 'post',
                ));

                // カスタムフィールドを登録
                update_post_meta($post_id, 'HP', $hp);
                update_post_meta($post_id, 'MP', $mp);
                update_post_meta($post_id, '攻撃力', $attack);
                update_post_meta($post_id, '防御力', $defense);
                update_post_meta($post_id, 'スピード', $speed);
                update_post_meta($post_id, '説明文', $description);
            }
        }
        fclose($handle);
    }
}
add_action('admin_post_import_csv_to_custom_fields', 'import_csv_to_custom_fields');
add_action('admin_post_nopriv_import_csv_to_custom_fields', 'import_csv_to_custom_fields');

カスタムテンプレート用のコード

php

$args = array(
    'post_type' => 'post',
    'post_status' => 'publish',
);
$query = new WP_Query($args);

if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        $post_id = get_the_ID();
        $hp = get_post_meta($post_id, 'HP', true);
        $mp = get_post_meta($post_id, 'MP', true);
        $attack = get_post_meta($post_id, '攻撃力', true);
        $defense = get_post_meta($post_id, '防御力', true);
        $speed = get_post_meta($post_id, 'スピード', true);
        $description = get_post_meta($post_id, '説明文', true);

        // データを表示
        echo 'Character Name: ' . get_the_title() . '
'; echo 'HP: ' . $hp . '
'; echo 'MP: ' . $mp . '
'; echo 'Attack: ' . $attack . '
'; echo 'Defense: ' . $defense . '
'; echo 'Speed: ' . $speed . '
'; echo 'Description: ' . $description . '

'; } wp_reset_postdata(); } else { echo 'No characters found.'; }

アップロード用フォームのコード

html

<form action="<?php echo esc_url(admin_url('admin-post.php')); ?>" method="post" enctype="multipart/form-data">
    <input type="hidden" name="action" value="import_csv_to_custom_fields">
    <input type="file" name="csv_import" accept=".csv">
    <input type="submit" value="Import CSV">
</form>

これらのコードを用いて、以下の機能が実装されます:

  • キャラクター用の投稿ページとして保管する
  • CSVデータをインポートできる
  • CSVデータはカスタムフィールドで投稿される
  • 一番左の列にキャラクター名を配置する
  • HP, MP, 攻撃力, 防御力, スピード, 説明文のパラメータを保管する
  • 既存のキャラクターの重複を検索し更新できる

これらのコードを適切な場所に配置して実行してください。functions.php用のコードはテーマのfunctions.phpファイルに、カスタムテンプレート用のコードはカスタムテンプレートファイル(例:page-custom.php)に、アップロード用フォームのコードはCSVアップロードを実行するページのテンプレート(例:page-upload.php)に配置してください。

アップロード用フォームの追記

wordpressのページテンプレートについてもう少し詳細に教えてください。カスタムフィールドとはまた別に、投稿ページ内でテンプレートを適応できる機能を実装できるということでしょうか?

WordPressのページテンプレートは、特定のページで使用されるカスタムレイアウトや機能を実装するための仕組みです。ページテンプレートは、通常のテーマファイルと同じフォルダ内に置かれ、特定のページで選択・適用することができます。

カスタムフィールドは投稿やページにメタデータを追加する機能であり、ページテンプレートはそれらのデータを表示や処理するための独自のレイアウトやスタイルを提供します。これらは異なる機能ですが、組み合わせて使うことで柔軟なデザインやデータ管理が可能になります。

ページテンプレートの作成方法は以下の通りです。

  1. 新しいPHPファイル(例:template-custom.php)を作成します。
  2. ファイルの先頭に以下のコメントを追加して、テンプレート名を指定します。
php

<?php
/**
 * Template Name: Custom Template
 */
?>
  1. 通常のWordPressテンプレートタグやPHPコードを使用して、必要な機能やデザインを実装します。
  2. テーマフォルダに作成したファイルをアップロードします。
  3. WordPress管理画面で、ページを新規作成または編集し、ページ属性ボックスの「テンプレート」ドロップダウンから作成したカスタムテンプレートを選択します。

これで、選択したページにカスタムテンプレートが適用されます。カスタムフィールドのデータを表示するために、カスタムテンプレート内でget_post_meta()関数などを使用してデータを取得し、適切な形式で出力することができます。

データアップロード用フォームのコード

page-upload.phpというファイルを作成し、先頭にテンプレート名を指定するコメントを追加します。ただし、テンプレート名はユニークでわかりやすいものに変更することをおすすめします。例えば、「CSV Upload Template」のような名前に変更できます。

php

<?php
/**
 * Template Name: CSV Upload Template
 */
?>

そして、page-upload.phpに以下のコードを追加してください。このコードは、先ほど提供したアップロード用フォームのコードです。

html

<form action="<?php echo esc_url(admin_url('admin-post.php')); ?>" method="post" enctype="multipart/form-data">
    <input type="hidden" name="action" value="import_csv_to_custom_fields">
    <input type="file" name="csv_import" accept=".csv">
    <input type="submit" value="Import CSV">
</form>

さらに、必要に応じて、page-upload.phpに通常のWordPressのページテンプレート構造を追加することができます。例えば、ヘッダー、フッター、サイドバーを追加したい場合、以下のようなコードを追加します。

php

<?php get_header(); ?>

<div id="primary" class="content-area">
    <main id="main" class="site-main">

        <?php
        while ( have_posts() ) :
            the_post();
            get_template_part( 'template-parts/content', 'page' );
        endwhile;
        ?>

        <form action="<?php echo esc_url(admin_url('admin-post.php')); ?>" method="post" enctype="multipart/form-data">
            <input type="hidden" name="action" value="import_csv_to_custom_fields">
            <input type="file" name="csv_import" accept=".csv">
            <input type="submit" value="Import CSV">
        </form>

    </main>
</div>

<?php get_sidebar(); ?>
<?php get_footer(); ?>

これで、page-upload.phpが完成し、ページを作成または編集時に「CSV Upload Template」を選択することができます。選択したページでは、CSVファイルのアップロードとインポートが行えるようになります。

テンプレートを選択する

テンプレートを選択するタイミングは、ページを新規作成または編集するときです。以下の手順でテンプレートを選択できます。

  1. WordPressの管理画面にログインします。
  2. 「ページ」メニューから「新規追加」または既存のページを編集したい場合は「すべてのページ」を選択します。
  3. 新しいページを作成するか、既存のページを編集する画面が表示されます。
  4. 画面の右側にある「ページ属性」ボックス内の「テンプレート」ドロップダウンから、作成したカスタムテンプレート(例:CSV Upload Template)を選択します。
  5. 必要なページのタイトルやコンテンツを編集し、最後に「公開」または「更新」ボタンをクリックして変更を保存します。

選択したテンプレートが適用されたページは、一般のユーザーにも閲覧できます。ただし、CSVアップロード機能については、先ほどのコードでは管理者のみがアクセスできるようになっています。一般ユーザーにも投稿を許可する場合は、権限をチェックするコードを修正する必要があります。

管理者以外のユーザーがアップロードできるようにするには、functions.phpimport_csv_to_custom_fields()関数内の権限チェック部分を変更します。

php

if (!current_user_can('edit_posts')) {
    wp_die('You do not have permission to upload files.');
}

上記のコードの 'edit_posts' を、アップロードを許可したいユーザーロールに適した権限に変更してください。例えば、投稿者(author)に許可する場合は 'edit_published_posts' に、寄稿者(contributor)に許可する場合は 'edit_posts' のままにします。

注意: アップロード機能を一般ユーザーに開放すると、セキュリティリスクが高まることがあります。必要に応じて追加のセキュリティ対策を検討してください。

スポンサーリンク

ゲームデータを簡単にテーブル(表)にする方法

これは番外編。とりあえずデータはエクセルなどに保存さえすればCSVにしてインポートできることがわかったので、「じゃあ、どうやって簡単にデータをテーブル化」するかどうかも考えておきましょう。

データ取得方法を工夫する

ゲーム内ブラウザの内容をテキストデータとして保存する方法や、画像データから表データを抽出する方法にはいくつかの手法があります。ただし、どの手法を使用するかは、ゲームやデータの種類によって異なります。

  1. ゲーム内ブラウザの内容をテキストデータとして保存する方法:
  • Webスクレイピング: ゲーム内ブラウザのウェブページのHTMLソースコードから情報を抽出する方法です。PythonのBeautifulSoupやlxml、RubyのNokogiri、JavaScriptのCheerioなど、多くのプログラミング言語にはウェブスクレイピング用のライブラリがあります。ただし、ウェブページの構造が複雑であったり、JavaScriptで動的に生成されている場合、この方法がうまく機能しないことがあります。
  • APIを利用する: ゲーム運営会社が公開しているAPIがあれば、それを利用してゲーム内の情報を取得することができます。APIを使うと、データを簡単に抽出できることが多いですが、公開されているAPIが限られている場合もあります。
  1. 画像データから表データを抽出する方法:
  • Optical Character Recognition (OCR): OCR技術を使用して、画像内のテキストをデジタルテキストに変換できます。Tesseract OCRやGoogle Cloud Vision API、Microsoft Azure Computer Vision APIなど、OCRライブラリやサービスがいくつかあります。ただし、OCRの精度は画像の品質やフォントによって異なり、完全に正確な結果が得られるとは限りません。
  • 人手によるデータ入力: 画像からのデータ抽出が難しい場合、手動でデータを入力することも検討できます。ただし、これは時間がかかる作業であり、人為的なミスが発生する可能性があります。

どの手法を選ぶかは、ゲームのデータソースやデータの構造、取得できる情報の種類によって異なります。効率的な方法を見つけるために、複数の手法を試すことをおすすめします。

ゲーム内ブラウザからデータを取得する

ゲーム内ブラウザのHTMLソースを取得するのは、通常のウェブサイトに対するスクレイピングよりも困難です。アプリ内のブラウザは、通常のウェブブラウザとは異なり、通常は外部からアクセスすることができません。ただし、いくつかのアプローチがあります。

  1. 公式ウェブサイトやフォーラムをチェックする: ゲーム運営会社は、公式ウェブサイトやフォーラムで情報を提供することがあります。これらのウェブページは通常のウェブブラウザでアクセスできるため、スクレイピングが可能です。
  2. ネットワークトラフィックを解析する: ゲーム内ブラウザがサーバーと通信して情報を取得している場合、ネットワークトラフィックを解析してその情報を取得することができます。これには、WiresharkやCharles Proxyのようなネットワークパケットキャプチャツールを使用します。ただし、この方法は技術的に複雑であり、ゲーム運営会社が通信内容を暗号化している場合は機能しないことがあります。
  3. アプリのリバースエンジニアリング: ゲームアプリのコードをリバースエンジニアリングして、情報を取得する方法があります。これは、法的な問題や運営会社の規約違反になる可能性がありますので、注意して行ってください。また、この方法は非常に技術的であり、成功する保証はありません。
  4. ゲームコミュニティから情報を取得する: ゲームのコミュニティ(フォーラムやSNSグループなど)に参加し、他のプレイヤーが提供する情報を利用することができます。これは最も手軽な方法ですが、情報の正確性や完全性に依存しているため、確実性は低いことがあります。

ゲーム内ブラウザのHTMLソースコードから情報を抽出するには、上記のアプローチのいずれかを試して、取得したデータに対してWebスクレイピングを実施します。ただし、どのアプローチが適切かは、ゲームやデータソースによって異なります。

画像データから表データを抽出する方法

しろくま
しろくま

先に書いておくと、今一番やりやすい方法はExcelが画像データからそのまま表に取り込むことができる機能をリリースしています。

かめ
かめ

さらに言えば、画像からテキスト化するのはiPhoneの機能として搭載されているし、Google Driveで画像をアプリで開けば認識できるテキストは抽出されるようになっています。問題は、この関連づけられていないテキストを表として簡単にまとめられるかどうか、というところです。

テキストをデータとしてまとめる方法

OCR技術でテキストデータを抽出した後、そのデータを表形式に整理する方法として、以下の手順がお勧めです。

  1. データの前処理: OCRで抽出したテキストデータは、しばしばノイズや誤りが含まれています。まずは、不要な空白や特殊文字を削除し、テキストデータを整形します。
  2. データの分割: テキストデータを行ごとに分割します。これにより、各行が表の1行に相当するデータを含むようになります。
  3. 区切り文字の使用: 行内のデータをさらにセルに分割するため、区切り文字(カンマ、タブ、セミコロンなど)を使用します。OCRで抽出したテキストデータには、もともと区切り文字が含まれている場合もありますが、そうでない場合は、適切な区切り文字を選択してデータを分割します。
  4. 正規表現を使用: OCRで抽出したテキストデータに明確な区切り文字が存在しない場合、正規表現を使用してデータをセルに分割することができます。例えば、数字と文字の間にあるスペースを区切り文字として使用するなど、状況に応じた正規表現を作成してデータを分割します。
  5. 表形式に整理: 分割したデータを2次元配列やデータフレーム(PythonのPandasライブラリなど)に変換し、表形式に整理します。
  6. データのクレンジング: 表形式に整理したデータを確認し、不要な行や列を削除したり、値の書式を統一したり、欠損値を補完したりして、データのクレンジングを行います。

このプロセスを通じて、OCRで抽出したテキストデータを表形式に整理することができます。ただし、OCR技術の精度やデータの特性によっては、手動での編集が必要になる場合もありますので、注意してください。

しろくま
しろくま

テキストのノイズを除外して、区切り文字として適切なものを選べば良いというわけですね。

スポンサーリンク

まとめ:「WordPressでCSVデータをインポート」についての体験談

この項目はChatGPTの出力を待ちながら、考えたことや他の方の意見などを参考にしながら、いろいろなメモを書いておきます。

「WordPressでCSVデータをインポート」できることメモ

これは本当のメモ。

  • CSVでインポートしてそのままデータ化できるのはありがたい。
  • 全てやるとかなりfunctions .phpがゴチャつきそうなので一度全部調べてから適応可能な改変をしていく
  • あとは表形式で表示した後のユーザービリティを向上させる施策を
  • とはいえ、基本的には技術的に「簡単に攻略サイトくらいデータの取り扱いができるようになる」ことが目標
  • 攻略wiki的な構造を他のジャンルに落とし込む準備を。

今後やりたいことメモ

こちらもメモ。

  • APIを利用できるまでのPython基礎編
  • ブログ運営に役立ちそうなChatGPTの利用方法
  • 情報収集した内容を踏まえてブログ記事に投稿する手順
  • 正規表現を利用した有効な検索方法をChatGPTに生成させる
  • 毎日チェックすべき情報をまとめるツール作成(おそらくPython)
  • 毎日のやることをChatGPTに相談できる(秘書化)
  • WordPressの記事をデータベース化してユーザーに任意の情報を抽出・操作できるサイト構造を目指す
  • データ検索機能(キャラ名を入力するとデータテーブルがそれだけになる、的な)

「WordPressでCSVデータをインポート」に関する口コミや評判

SNS情報のメモです。

WordPressでCSVデータをインポートに関する情報

Twitter検索用のリンクはこちら。

「WordPressでCSVデータをインポート」に関するよくある質問

Q
CSVデータをWordPressにインポートするためには、どのようなプラグインが必要ですか?
A

CSVデータをインポートするために特別なプラグインは必要ありません。functions.phpファイルとカスタムテンプレートを使用して、データをインポートする機能を実装できます。

Q
カスタムフィールドを使用する際に、どのようにデータを管理すべきですか?
A

カスタムフィールドのデータは、投稿ページごとにIDで管理されます。データを呼び出す際には、get_post_meta()関数を使用して投稿IDとカスタムフィールド名を指定します。

Q
既存のキャラクターデータを更新するにはどうすればいいですか?
A

CSVデータに既存のキャラクター情報を含めてアップロードし、コード内でキャラクター名を検索して重複を検出します。重複がある場合は、データを更新します。

Q
ゲーム情報をCSVデータに変換する方法はありますか?
A

ゲーム情報をテキストデータに抽出し、それを表形式に整理することができます。OCR技術を利用して画像からテキストデータを抽出し、それを表形式に整理してCSVデータに変換することができます。

Q
WordPressで作成したデータインポート機能を一般のユーザーから非表示にする方法はありますか?
A

データインポート機能を管理者のみがアクセスできるようにすることができます。current_user_can()関数を使用して、現在のユーザーが管理者であるかどうかをチェックし、管理者以外のアクセスを制限します。

ChatGPTに関する記事リスト

当サイトでひたすらChatGPTに出力させて記事錬成しているリストはこちらになります。

ChatGPTやAIに関する記事リスト

ブログ更新を自動化させるためにChatGPTの使いかたや生成系AIの技術進歩を勉強するために記事を作成しています。

コメント

  1. buchikuma-info より:

    「archive puzzles past」に関する最新情報です。

    ニューヨーク・タイムズのゲーム部門が、Wordleアーカイブを開始し、1,000以上の過去のパズルにアクセスできるようになった。このアーカイブは、モバイルとデスクトップ向けに展開され、ゲームやオールアクセスの購読者が利用可能であり、数ヶ月かけて段階的に提供される予定。今後数週間でアーカイブを拡大する計画もある。

    https://techcrunch.com/2024/05/07/nyt-games-wordle-archive-access-1000-past-puzzles/

  2. buchikuma-info より:

    「カスタム チーム dtto」に関する最新情報です。

    プロeスポーツチーム「REJECT」の「巫神こん」と「dtto.」が初の冠大会「こんでぃっとカスタム」を開催することが決定した。この大会はPlayStation®︎コミュニティ向けの『Apex Legends』カスタムマッチで、「巫神こん」と「dtto.」率いる「こんでぃっとチーム」と公募の19チームが競い合う。

    https://prtimes.jp/main/html/rd/p/000000106.000050979.html

  3. buchikuma-info より:

    「alliance field field alliance」に関する最新情報です。

    愛知県大府市にあるField Allianceは、2020年から完全非接触の自動おしぼり供給機「SAWANNA」を販売しており、飲食店やホテルでの導入が増えている。この製品はセンサー技術を活用し、手をかざすだけでウェットティッシュが排出される革新的なものであり、プラ削減や従業員の負担軽減に貢献している。販売実績は約1900台であり、今後も飲食店やホテルを中心に展開していく方針だ。

    https://www.ssnp.co.jp/foodservice/541456/

  4. buchikuma-info より:

    「画像 ai 画像 認識」に関する最新情報です。

    AI開発クラウドサービス「ADFI(アドファイ)」を提供する株式会社AIロボティクスが、プログラミング不要で最先端の画像認識AIを開発できるクラウドサービス「ADFI画像認識」のベータ版を3月12日にリリースした。このサービスを利用することで、プログラミングやAIの専門知識がなくても無料で最先端の画像認識AIを作成できる。

    https://news.google.com/rss/articles/CBMiJWh0dHBzOi8vd3d3LmF0cHJlc3MubmUuanAvbmV3cy8zODc3OTjSAQA?oc=5

  5. buchikuma-info より:

    「解析 フォーム サービス」に関する最新情報です。

    株式会社sci-boneは、2024年2月29日にテニスとサッカーの出張フォーム解析サービスをリリースしました。このサービスでは、モーションキャプチャウェアを使用して動作を計測し、バイオメカニクスを活用して動作の改善ポイントを解析します。料金はスタンダードプランが3,000円、徹底解析プランが5,000円で、解析結果はフィードバックシートまたはオンラインで提供されます。

    https://prtimes.jp/main/html/rd/p/000000002.000135425.html

  6. buchikuma-info より:

    「echo シリーズ amazon」に関する最新情報です。

    Amazonが新製品「Echo Hub」を発売し、8型の画面を備えたスマートスピーカーである。従来のEchoシリーズとは異なり、壁掛け型のスマートホームコントロールパネルとして特徴付けられており、USB Type-C端子を使用し、充電器の汎用性が高い点も異色である。

    https://www.itmedia.co.jp/pcuser/articles/2402/26/news100.html

  7. buchikuma-info より:

    「ff リバース フィールド」に関する最新情報です。

    『ファイナルファンタジーVII リバース』は、前作を上回る高い評価を受けており、広大なフィールドでの冒険や工夫が評価されている。最新技術を駆使した3Dグラフィックやアクションベースの戦闘など、新要素も取り入れられている。体験版も配信され、製品版の反応も期待されている。オリジナル版からのストーリー変更も注目されている。

    https://automaton-media.com/articles/newsjp/20240223-283659/

  8. buchikuma-info より:

    「画像 認識 画像 認識」に関する最新情報です。

    パナソニックは、カリフォルニア大学バークレー校や南京大学、北京大学の研究者らと共同で、雨や雪、霧などの悪天候によって画像認識精度が低下する問題を解決するためのAI技術を開発しました。この技術は画像認識精度を向上させ、車載センサやセキュリティカメラなどで高精度な画像認識が可能となります。

    https://news.google.com/rss/articles/CBMiUGh0dHBzOi8vZmluYW5jZS55YWhvby5jby5qcC9uZXdzL2RldGFpbC9mMzhmZWNlZmFhZjNkNGI3YTk4ZjM4NzQ4MTM5MzRiZTMxOTc5Mjgz0gEA?oc=5

  9. buchikuma-info より:

    「フレーム フレーム レート レート」に関する最新情報です。

    カプコンの『ドラゴンズドグマ 2』のディレクターである伊津野英昭氏が、本作が可変フレームレートに対応していることを明言しました。これは、最近のフレームレートに関する噂に対する回答となるものであり、大きな反響を呼んでいます。伊津野氏は、可変フレームレートとは、ゲームプレイ中のフレームレートが処理負荷に応じて増減する仕組みであることを説明しています。これにより、『ドラゴンズドグマ 2』は特定のフレームレートに固定されることなく、よりスムーズなゲームプレイが可能となります。

    https://automaton-media.com/articles/newsjp/20240214-282510/

  10. buchikuma-info より:

    「100 100 搭載 ai」に関する最新情報です。

    NVIDIAは、生成AI向けのクラウドサービス「高火力 PHY」を提供開始する。このサービスは、NVIDIAの「H100 Tensor コア GPU」を搭載したベアメタルのサーバーであり、月額費用は304万6,120円で、最低利用期間は2カ月。3年コミットの場合は243万6,896円となる。高火力 PHYは、サーバー1台あたり8基のH100を搭載し、200GbE×4本の回線でサーバー間の通信を行うことが可能で、大規模な生成AIモデルの利用を想定している。また、再生可能エネルギー電源100%の石狩データセンターで提供され、CO2排出量ゼロを実現する予定である。

    https://news.google.com/rss/articles/CBMiNWh0dHBzOi8vcGMud2F0Y2guaW1wcmVzcy5jby5qcC9kb2NzL25ld3MvMTU2MzUzNS5odG1s0gEA?oc=5

  11. buchikuma-info より:

    「blind field field lets」に関する最新情報です。

    タイトル: OneCourtの触覚ミニフィールドが視覚障害者のファンに触覚で試合を追うことを可能にする
    見出し: OneCourtの触覚ミニフィールドが視覚障害者のファンに触覚で試合を追うことを可能にする
    トピック1:
    トピックのキーワード: 視覚障害者 フィールド フィールドが フィールドが 試合 試合 視覚障害者のファン 視覚障害者のファン ファンが ファンが ファンが 試合を 追う 追う 追う 追う 追う 試合
    トップの段落:
    エンティティ: 視覚障害者のファンは、ほとんどがテレビで試合を観戦しますが、視覚障害者や低視力の人々はラジオ放送に頼る必要があります。
    キーワード: OneCourt 触覚ミニ フィールド 視覚障害者のファン 試合 追う 触覚 スポーツファンは、お気に入りの試合をテレビで観戦することが多いですが、視覚障害者や低視力の人々は通常、アナウンサーのラジオ放送に頼る必要があります。OneCourtは、その経験を補完することを目指し、ミニチュアフィールドをラップトップに搭載し、リアルタイムで選手やボールの位置

    https://techcrunch.com/2024/01/09/onecourts-haptic-mini-field-lets-blind-fans-follow-the-game-by-touch/

  12. buchikuma-info より:

    「con con field es」に関する最新情報です。

    「ES CON FIELD神社」は、年末年始に参拝するのに最適な場所です。参拝者は無料で入場でき、神社で勝利や商売の成功を祈願することができます。また、ES CON FIELD神社では限定のクリスマスメニューや音楽祭も開催されています。参拝の詳細やイベントの情報は、株式会社ファイターズスポーツ&エンターテイメントの公式ウェブサイトで確認できます。

    https://prtimes.jp/main/html/rd/p/000000177.000079562.html

  13. buchikuma-info より:

    「データ excel クエリ」に関する最新情報です。

    12月11日(月)に開催された「Excelで学ぶデータ集計 番外編~データの整形・加工作業を自動化できるパワークエリとは~」というセミナーのアーカイブ映像が無料配信されています。このセミナーはExcel中級者向けで、パワークエリの機能について学ぶことができます。セミナーは株式会社クリーク・アンド・リバー社が開催し、Excelのデータ集計や整形、加工作業を自動化する方法について詳しく解説されています。配信は12月11日(月)の12時から行われます。セミナーの詳細やお申し込みについては、株式会社ワンズ・ワンのホームページで確認することができます。

    https://prtimes.jp/main/html/rd/p/000003216.000003670.html

  14. buchikuma-info より:

    「packers field lambeau」に関する最新情報です。

    タイトル:Lambeau Fieldは日曜日のPackers-Chargers戦に備えています
    見出し:Lambeau Fieldは日曜日のPackers-Chargers戦に備えています、Packersは50年代のクラシックな代替ユニフォームを着用、関連コンテンツ、元タックルのBryan BulagaがPackerとして引退、Valley Christian SchoolのDan BirrがGreen Bay Packers High School Coach of the Weekに選ばれる、PackersがSeahawksからCB Kyu Blu Kellyをウェイバーで獲得、PackersがLB Austin Ajiakeを練習生として契約、PackersがS Innis Gainesを解雇、Green Bay Packers Hall of Fame Inc.がClay MatthewsとAaron Kampmanを殿堂入りさせる、PackersがS Innis Gainesをアクティブロースターに契約
    トピック1:
    トピックのキーワード:packers field lambeau lambeau field chargers chargers game game packers chargers sunday field ready
    トップの段落:
    エンティティ:Lambeau Fieldは日曜日のPackers Chargers戦に備えています。Packersは50年代のクラシックな代替ユニフォームを着用します。Lambeau FieldはPackersの伝説的な歴史を持つチームの試合をキックオフします。
    キーワード:Lambeau FieldはPackers Chargers戦のために準備ができています。Packersは50年代のクラシックな代替ユニフォームを着用します。Lambeau Fieldは日曜日にファンを歓迎します。Packers Chargers戦はチームの伝説的な歴史を称えるもので、チームは

    https://news.google.com/rss/articles/CBMiXGh0dHBzOi8vd3d3LnBhY2tlcnMuY29tL25ld3MvbGFtYmVhdS1maWVsZC1yZWFkeS1mb3ItcGFja2Vycy1jaGFyZ2Vycy1nYW1lLXN1bmRheS13ay0xMS0yMDIz0gEA?oc=5

  15. buchikuma-info より:

    「体験 デジタル 実施」に関する最新情報です。

    東京都では、子供たちのデジタル体験を向上させるプロジェクト「デジタル創作体験」を実施します。このプロジェクトは、子供たちがデジタル技術を活用して創造的な活動を行うことを目指しています。今年の夏休みにはデジタル体験イベントが開催され、14か所の会場で3Dプリンタやゲーム制作、ロボット制作などのプログラムが提供されました。今後も子供たちが幅広いデジタル体験をすることができるよう、さまざまな活動を展開していく予定です。詳細は東京都のホームページで確認できます。

    https://prtimes.jp/main/html/rd/p/000004772.000052467.html

  16. buchikuma-info より:

    「arxiv 投稿 最新」に関する最新情報です。

    米コーネル大学が運営する論文サイト「arXiv」は、基礎科学研究を支援するために、米国の財団から1000万ドル以上の寄付を受け取ったことを発表しました。この寄付金は、arXivのクラウド化やコードの最新化など、ITインフラの強化に活用される予定です。arXivは1991年に立ち上げられ、物理学、数学、コンピュータサイエンスなどの分野の査読されていない論文を無料で閲覧することができます。コーネル大学は、200万件以上の論文を含むリポジトリのデータをクラウドに移行し、コードを最新化することで、研究者にとっての信頼性とアクセシビリティを確保する取り組みを行っています。

    https://www.itmedia.co.jp/news/articles/2310/25/news082.html

  17. buchikuma-info より:

    「ai ai ocr info」に関する最新情報です。

    コダックアラリスは、AI-OCRとの連携によりドキュメント処理を自動化する「KODAK Info Input Solution」を提供することを発表しました。このソフトウェアは、マルチフォーマットのデータの入力と出力に対応しており、OCR機能とAI-OCRの連携により、ドキュメントの文字認識技術を使い分けることができます。これにより、正確なデータの仕分けと抽出が可能となり、業務プロセスの効率化が図られます。また、従量課金制度が導入されており、コストを最小限に抑えながら必要なデータを引き渡すことができます。

    https://news.google.com/rss/articles/CBMiOGh0dHBzOi8vY2xvdWQud2F0Y2guaW1wcmVzcy5jby5qcC9kb2NzL25ld3MvMTUyODYxNC5odG1s0gEA?oc=5

  18. buchikuma-info より:

    「ocr ai ai ocr」に関する最新情報です。

    株式会社ハンモックは、OCRソフトウェア「AnyForm OCR 8.4」に精度を強化したAI-OCRエンジンを新たに搭載しました。この新しいエンジンは、人間の目視チェックに比べて高い精度で文字情報を学習し、OCR処理を行います。これにより、従来のOCR固定帳票に対応したAI-OCRソフトウェアを活用することで、帳票の自動化やデータ入力の効率化が可能となります。また、AnyForm OCRは、自社で作成した固定帳票だけでなく、取引先のシステムから出力される帳票のレイアウトにも対応しており、幅広い業務に活用できます。

    https://news.google.com/rss/articles/CBMiOGh0dHBzOi8vY2xvdWQud2F0Y2guaW1wcmVzcy5jby5qcC9kb2NzL25ld3MvMTUxNzMyOS5odG1s0gEA?oc=5

  19. buchikuma-info より:

    「ai ai 登場 セキュリティ」に関する最新情報です。

    セキュリティベンダーが、サイバー犯罪に特化した悪意ある生成AIの登場に注意を呼びかけています。この生成AIは、ビジネスメール詐欺(BEC)などの犯罪行為を支援するために設計されており、具体的な特徴や説得力の高いメールを作成し、マルウェアの作成などにも対応しています。セキュリティベンダーであるSlashNextは、この生成AIによるビジネスメール詐欺に対する注意喚起を行っており、トレーニングの実施や情報翻訳ツールの利用など、対策の必要性を訴えています。

    https://news.google.com/rss/articles/CBMiPmh0dHBzOi8vaW50ZXJuZXQud2F0Y2guaW1wcmVzcy5jby5qcC9kb2NzL3lhaml1bWEvMTUxNzAwMC5odG1s0gEA?oc=5

タイトルとURLをコピーしました