ピアニカ子オフィシャルサイトで使っている、ライブ・イベントスケジュール用のWordPressプラグイン Event Organiserのカスタマイズについて、ずっと悩んでいた部分がChatGPTを使ったら一気に解決したので忘備録。
Event Organiserは、WordPressで作成したサイトにイベント管理機能が追加できるプラグインです。
ライブ情報を作成したり、レッスン日時や発表会などのイベント情報を、カレンダーやリストで表示できる高機能カレンダープラグインです。
WordPressの投稿記事とは別に、カスタムフィールドで投稿を行うので、ピアニカ子のように日記とイベントの投稿を分けたい場合や、カレンダーで予定を一覧表示したい場合などは非常に優秀で便利なプラグインです。
ただ、カスタムフィールドでの投稿はデフォルトではフィード(RSS)に出力されない為、これをどうにかしてフィード出力できないものかと検索していたのですが、実装しているサイトが見つからず手こずっていたところ、ChatGPTを使ってみるという手段を思いつたのでストレートに質問してみました。
ChatGPTに実装方法を聞いてみたら、ちょっとかわいかった
わりとストレートにやりたいことをChatGPTに質問。
実は私、ChatGPTを使うのは初めてなのでお試しにとChatGPT 4o miniで質問してみました。
WordPressのプラグインEvent Organiserで作ったカスタムフィールドの投稿をフィード(RSS)に入れたい。
実装方法と解説しているサイトを教えてほしい。
すぐに表示された返答がまさかの英語。
つい癖でDeepL翻訳を開いたんですが、相手がChatGPTという事を思い出しました。
なんか、かわいいなChatGPT。
以前にミリキャンバスに搭載されているAIツールで画像生成した際も、AIならではの面白い画像が生成された事があって、なかなか完璧じゃない感がかわいいです。
イベントページ独自のRSSフィードに出力
最初の質問で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_location
とevent_start_time
というカスタムフィールドの値を追加しています。これらのフィールド名は、実際のEvent Organiserプラグインの設定に合わせて変更してください。
2.RSSテンプレートのカスタマイズ
カスタムフィールドのデータを特定の形式で表示したい場合、さらにRSSのテンプレートをカスタマイズすることもできますが、基本的な追加方法は上記のようにrss2_item
フックを使用します。
3.テスト
上記のコードをfunctions.php
に追加したら、WordPressのRSSフィード(https://yourdomain.com/feed/
)を確認して、カスタムフィールドが正しく表示されているかを確認してください。
実際にはEvent Organiserのパーマリンク設定したサブディレクトリ(
https://yourdomain.com/events/feed/
)に出力されました。参考になるサイト
以下のWordPress関連のサイトやフォーラムでは、さらに詳しい情報やコード例を見つけることができます。
- WPMU DEV - WordPressの開発に関する高品質な情報
- WPBeginner - 初心者向けの詳細なガイド
- Smashing Magazine - ウェブ開発に関する役立つ記事
また、Event Organiserプラグインの公式ドキュメントにも役立つ情報が載っています:
これで、RSSフィードにEvent Organiserのカスタムフィールドを追加する準備が整うはずです。もし他に質問があれば、お気軽にお尋ねください!
注釈にも書いていますがこの方法を実装すると、通常投稿で出力されるRSSフィード(https://yourdomain.com/feed/
)とは別に、Event Organiserのパーマリンク設定したサブディレクトリ(https://yourdomain.com/
)にEvent Organiserで投稿した記事が出力されます。events
/feed/
RSSフィードを投稿とは分けたい場合はこの方法で良いのですが、私が希望しているのはブログ投稿と同じRSSフィードで出力したいので、同じスレッド内でさらにプロンプト(質問)を追加します。
投稿とイベントを同じRSSフィードに出力
求めている回答が出るまでのやりとり
上記の方法で出力されたRSSはイベントページのみのRSSフィード(https://yourdomain.com/events/feed/
)に出力されますが、投稿と同じRSSフィード(https://yourdomain.com/feed/
)に出力することはできますか?
はい、投稿と同じRSSフィード(https://yourdomain.com/feed/
)にEvent Organiserのカスタムフィールドを追加することは可能です。デフォルトでは、https://yourdomain.com/feed/
は通常の投稿(ブログ記事)のフィードになりますが、Event Organiserのイベント投稿タイプに関するカスタムフィールドをこのフィードに追加するためには、いくつかのカスタマイズが必要です。
通常の投稿とイベントの両方を同じフィードに追加するためには、rss2_item
アクションフックを使用して、イベント投稿タイプにもカスタムフィールドを挿入する必要があります。以下のコードで、イベント投稿が通常のブログ投稿のRSSフィードに表示されるように設定します。
と返答されたものの、ChatGPTで提案されたコードはadd_event_organiser_custom_fields_to_rss
がadd_event_organiser_custom_fields_to_main_rss_feed
に変わっただけで、なんか違うと思いつつもテスト。
やはりRSSフィードの出力先はevents
デレクトリだったので再度質問。
うまくいきません。
通常の投稿とEvent Organiserの投稿が別のフィードに出力されます。
申し訳ありません、うまくいかなかったとのことです。通常の投稿とEvent Organiserのイベント投稿が別々のRSSフィードに出力される問題に関して、解決策を再度詳しくご案内します。
https://yourdomain.com/feed/
に投稿とイベントの両方を表示させるためには、少し異なる方法でRSSフィードをカスタマイズする必要があります。
ChatGPT、やっぱりかわいいな。
しかし、本気を出すと素晴らしい回答が出てきました。やるな、ChatGPT。
解決策
Event Organiserの投稿が通常のブログ投稿フィードに追加されない理由は、get_post_type()
で判定した場合、通常の投稿 (post
) とイベント (event
) が別々の投稿タイプとして処理されているためです。これを統合するには、pre_get_posts
フィルターフックを使って、RSSフィードに両方の投稿タイプを含めるようにカスタマイズする必要があります。
手順
コードを参考にし実装する場合は必ずバックアップを行なってください。
pre_get_posts
でフィードの投稿タイプを変更 これにより、https://yourdomain.com/feed/
に投稿タイプ「event」も含まれるようになります。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' );
pre_get_posts
フィルターpre_get_posts
を使って、RSSフィードに出力される投稿タイプをpost
(通常の投稿)とevent
(Event Organiserのイベント)両方に設定しています。- これにより、
https://yourdomain.com/feed/
のRSSフィードに通常の投稿とイベントが両方含まれるようになります。
rss2_item
アクション- イベントのカスタムフィールド(例:
_event_location
や_event_start_time
)を追加しています。これにより、イベントの投稿がフィード内に表示される際、これらの情報も出力されます。
- イベントのカスタムフィールド(例:
- 変更を加えた後、
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絵文字付きでお返事くれた
上記の方法で同じRSSフィードに出力されました。
ありがとうございます。
うまくいったとのこと、良かったです!🎉
もし今後さらにカスタマイズが必要だったり、他の質問があれば、いつでもお手伝いしますのでお気軽にお知らせください。
引き続きWordPressの開発を楽しんでくださいね!😊
やっぱりなんかカワイイ。