本サイトはプロモーションが含まれています

Event Organiserの投稿をWordPressの投稿フィード(RSS)に出力する【ChatGPT活用】

Note
この記事は約13分で読めます。

ピアニカ子オフィシャルサイトで使っている、ライブ・イベントスケジュール用のWordPressワードプレスプラグイン Event Organiserイベントオーガナイザーのカスタマイズについて、ずっと悩んでいた部分がChatGPTチャットジーピーティーを使ったら一気に解決したので忘備録。

Event Organiserは、WordPressで作成したサイトにイベント管理機能が追加できるプラグインです。
ライブ情報を作成したり、レッスン日時や発表会などのイベント情報を、カレンダーやリストで表示できる高機能カレンダープラグインです。

WordPressの投稿記事とは別に、カスタムフィールドで投稿を行うので、ピアニカ子のように日記とイベントの投稿を分けたい場合や、カレンダーで予定を一覧表示したい場合などは非常に優秀で便利なプラグインです。

ピアニカ子ライブスケジュールはこちら

ただ、カスタムフィールドでの投稿はデフォルトではフィード(RSS)に出力されない為、これをどうにかしてフィード出力できないものかと検索していたのですが、実装しているサイトが見つからず手こずっていたところ、ChatGPTを使ってみるという手段を思いつたのでストレートに質問してみました。

解決策が出るまでのChatGPTとのやりとりを残しているので、実装方法のみ知りたい方は目次の項目から実装したい内容を選んで飛ばし読みしていただいて構いません。

ChatGPTに実装方法を聞いてみたら、ちょっとかわいかった

わりとストレートにやりたいことをChatGPTに質問。
実は私、ChatGPTを使うのは初めてなのでお試しにとChatGPT 4o miniで質問してみました。

Kayoko
Kayoko

WordPressのプラグインEvent Organiserで作ったカスタムフィールドの投稿をフィード(RSS)に入れたい。
実装方法と解説しているサイトを教えてほしい。

すぐに表示された返答がまさかの英語。

ChatGPT

つい癖でDeepL翻訳を開いたんですが、相手がChatGPTという事を思い出しました。

日本語でお願いします。

なんか、かわいいなChatGPT。

以前にミリキャンバスに搭載されているAIツールで画像生成した際も、AIならではの面白い画像が生成された事があって、なかなか完璧じゃない感がかわいいです。

イベントページ独自のRSSフィードに出力

最初の質問でChatGPTが回答した実装方法が以下です。

ChatGPTの回答は必ずしも正しいとは限りません。誤表記の部分に注釈を入れています。
コードを参考にし実装する場合は必ずバックアップを行なってください。
ChatGPT
ChatGPT

1.RSSフィードにカスタムフィールドを追加する

カスタムフィールドをRSSフィードに追加するためには、テーマのfunctions.phpファイルを編集するか、カスタムプラグインを作成する方法があります。以下のコードは、RSSフィードの各イベントにカスタムフィールドを追加する方法です。

function add_event_organiser_custom_fields_to_rss() {
    if ( is_singular( 'event' ) ) { // イベント投稿タイプであるかを確認
        global $post;
        
        // 例: Event Organiserのカスタムフィールドを取得
        $event_location = get_post_meta( $post->ID, '_event_location', true );
        $event_start_time = get_post_meta( $post->ID, '_event_start_time', true );
        
        // RSSフィードにカスタムフィールドを追加
        echo '<event_location>' . esc_html( $event_location ) . '</event_location>';
        echo '<event_start_time>' . esc_html( $event_start_time ) . '</event_start_time>';
    }
}
add_action( 'rss2_item', 'add_event_organiser_custom_fields_to_rss' );
説明:
  • get_post_meta()関数でカスタムフィールド(この例ではイベントの場所と開始時間)を取得します。
  • rss2_itemアクションフックを使って、各RSSアイテムにカスタムフィールドを追加します。
  • 上記のコードでは、event_locationevent_start_timeというカスタムフィールドの値を追加しています。これらのフィールド名は、実際のEvent Organiserプラグインの設定に合わせて変更してください。

2.RSSテンプレートのカスタマイズ

カスタムフィールドのデータを特定の形式で表示したい場合、さらにRSSのテンプレートをカスタマイズすることもできますが、基本的な追加方法は上記のようにrss2_itemフックを使用します。

3.テスト

上記のコードをfunctions.phpに追加したら、WordPressのRSSフィード(https://yourdomain.com/feed/)を確認して、カスタムフィールドが正しく表示されているかを確認してください。

注釈:この方法であればRSSフィードの出力URLに誤りがあります。
実際にはEvent Organiserのパーマリンク設定したサブディレクトリ(https://yourdomain.com/events/feed/)に出力されました。

参考になるサイト

以下のWordPress関連のサイトやフォーラムでは、さらに詳しい情報やコード例を見つけることができます。

また、Event Organiserプラグインの公式ドキュメントにも役立つ情報が載っています:

これで、RSSフィードにEvent Organiserのカスタムフィールドを追加する準備が整うはずです。もし他に質問があれば、お気軽にお尋ねください!

注釈にも書いていますがこの方法を実装すると、通常投稿で出力されるRSSフィード(https://yourdomain.com/feed/)とは別に、Event Organiserのパーマリンク設定したサブディレクトリ(https://yourdomain.com/events/feed/)にEvent Organiserで投稿した記事が出力されます。
RSSフィードを投稿とは分けたい場合はこの方法で良いのですが、私が希望しているのはブログ投稿と同じRSSフィードで出力したいので、同じスレッド内でさらにプロンプト(質問)を追加します。

投稿とイベントを同じRSSフィードに出力

求めている回答が出るまでのやりとり

Kayoko
Kayoko

上記の方法で出力されたRSSはイベントページのみのRSSフィード(https://yourdomain.com/events/feed/)に出力されますが、投稿と同じRSSフィード(https://yourdomain.com/feed/)に出力することはできますか?

ChatGPT
ChatGPT

はい、投稿と同じRSSフィード(https://yourdomain.com/feed/)にEvent Organiserのカスタムフィールドを追加することは可能です。デフォルトでは、https://yourdomain.com/feed/ は通常の投稿(ブログ記事)のフィードになりますが、Event Organiserのイベント投稿タイプに関するカスタムフィールドをこのフィードに追加するためには、いくつかのカスタマイズが必要です。

方法:

通常の投稿とイベントの両方を同じフィードに追加するためには、rss2_item アクションフックを使用して、イベント投稿タイプにもカスタムフィールドを挿入する必要があります。以下のコードで、イベント投稿が通常のブログ投稿のRSSフィードに表示されるように設定します。

と返答されたものの、ChatGPTで提案されたコードはadd_event_organiser_custom_fields_to_rssadd_event_organiser_custom_fields_to_main_rss_feedに変わっただけで、なんか違うと思いつつもテスト。
やはりRSSフィードの出力先はeventsデレクトリだったので再度質問。

Kayoko
Kayoko

うまくいきません。
通常の投稿とEvent Organiserの投稿が別のフィードに出力されます。

ChatGPT
ChatGPT

申し訳ありません、うまくいかなかったとのことです。通常の投稿とEvent Organiserのイベント投稿が別々のRSSフィードに出力される問題に関して、解決策を再度詳しくご案内します。

https://yourdomain.com/feed/ に投稿とイベントの両方を表示させるためには、少し異なる方法でRSSフィードをカスタマイズする必要があります。

ChatGPT、やっぱりかわいいな。
しかし、本気を出すと素晴らしい回答が出てきました。やるな、ChatGPT。

ChatGPT
ChatGPT

解決策

Event Organiserの投稿が通常のブログ投稿フィードに追加されない理由は、get_post_type()で判定した場合、通常の投稿 (post) とイベント (event) が別々の投稿タイプとして処理されているためです。これを統合するには、pre_get_posts フィルターフックを使って、RSSフィードに両方の投稿タイプを含めるようにカスタマイズする必要があります。

手順

ChatGPTの回答は必ずしも正しいとは限りません。
コードを参考にし実装する場合は必ずバックアップを行なってください。
  1. pre_get_posts でフィードの投稿タイプを変更 これにより、https://yourdomain.com/feed/ に投稿タイプ「event」も含まれるようになります。
  2. functions.php に以下のコードを追加
function include_events_in_main_feed( $query ) {
    // 管理画面や管理用のフィードではなく、フロントエンドのフィードを変更
    if ( $query->is_feed() && !is_admin() ) {
        // 投稿とイベントの両方をフィードに含める
        $query->set( 'post_type', array( 'post', 'event' ) );
    }
}
add_action( 'pre_get_posts', 'include_events_in_main_feed' );

function add_event_organiser_custom_fields_to_rss() {
    if ( get_post_type() == 'event' ) { // イベントタイプの投稿の場合
        global $post;
        
        // Event Organiserのカスタムフィールドを取得
        $event_location = get_post_meta( $post->ID, '_event_location', true );
        $event_start_time = get_post_meta( $post->ID, '_event_start_time', true );
        
        // RSSにカスタムフィールドを追加
        echo '<event_location>' . esc_html( $event_location ) . '</event_location>';
        echo '<event_start_time>' . esc_html( $event_start_time ) . '</event_start_time>';
    }
}
add_action( 'rss2_item', 'add_event_organiser_custom_fields_to_rss' );
解説:
  1. pre_get_posts フィルター
    • pre_get_posts を使って、RSSフィードに出力される投稿タイプを post(通常の投稿)と event(Event Organiserのイベント)両方に設定しています。
    • これにより、https://yourdomain.com/feed/ のRSSフィードに通常の投稿とイベントが両方含まれるようになります。
  2. rss2_item アクション
    • イベントのカスタムフィールド(例:_event_location_event_start_time)を追加しています。これにより、イベントの投稿がフィード内に表示される際、これらの情報も出力されます。
3.テスト
  • 変更を加えた後、https://yourdomain.com/feed/ を開き、投稿とイベントの両方が含まれているかを確認してください。
  • イベントのカスタムフィールド(例:<event_location><event_start_time>)が表示されていることを確認してください。

追加の注意点

  • イベントのカスタムフィールドが正しく表示されない場合、get_post_meta() で使っているフィールド名が正しいかどうかを再確認してください。特に Event Organiser のカスタムフィールド名は、テーマやプラグインの設定によって異なる場合があります。
  • 他のプラグインやテーマのカスタマイズが影響を与えている可能性があるため、変更後に動作確認を行ってください。

この方法で、通常の投稿とEvent Organiserのイベントが同じRSSフィードに表示されるはずです。もしうまくいかない場合は、さらに詳細なデバッグを行うか、別のアプローチを考える必要がありますので、その際は再度お知らせください。

ChatGPTは同じスレッド内で続けて質問するのがコツ

すでにChatGPTを使いこなしている方には当たり前の話なんですが、ChatGPTで自分の求めている回答を得たい場合は、同じスレッド内で質問を続けていくのがコツのようです。
「なんか違うな」と思ったら、「なんか違う」と入力すれば別の回答を用意してくれます。

逆にいうと、前の質問と全く異なる質問を行いたい場合は、新たにスレッドを作り直した方が伝わりやすいです。

使用の注意点としては、ChatGPTの回答は必ずしも正しいとは限らないこと。
ChatGPTは大量のテキストデータ(本、ウェブサイト、記事、対話など)を使って言語の構造や意味を学習し、それらのデータを使って適切な返答を生成する生成型事前学習トランスフォーマ(Generative Pre-trained Transformer)です。
私たちが日頃行っているネット検索を駆使してすごいスピードで回答していると思ってください。
情報収集の際に誤った回答を拾ってくることがあります。
ChatGPTのサイト内でも明記されていますが、重要な情報は確認するようにしてください。

おまけ ChatGPT絵文字付きでお返事くれた

Kayoko
Kayoko

上記の方法で同じRSSフィードに出力されました。
ありがとうございます。

ChatGPT
ChatGPT

うまくいったとのこと、良かったです!🎉

もし今後さらにカスタマイズが必要だったり、他の質問があれば、いつでもお手伝いしますのでお気軽にお知らせください。

引き続きWordPressの開発を楽しんでくださいね!😊

やっぱりなんかカワイイ。

ミリキャンバス搭載のAIツールで画像生成した話
この記事を書いた人
Kayoko

広島の鍵盤ハーモニカおたくです。
YouTubeでは鍵盤ハーモニカを立奏両手弾きしたり多重録音したりリモートセッションしたりしています。
鍵盤ハーモニカデュオ「ピアニカ子とメロディカ子」のメロディカ子としてライブをしたり動画をアップしたりしています。

Kayokoをフォローする
Note
PR
Kayokoをフォローする