RSSフィードからSNSに配信する場合は以下の記事参照
WordPressでプラグインを使わずIFTTTを使ってRSSフィードからSNSに配信する
https://qiita.com/gatespace/items/ebd43d1ba6ef18365415
RSSフィードにある要素であればその組み合わせでSNSに配信できるのだけど、「投稿タグを自動でハッシュタグに変換してSNSに投稿したい」となると、ちょっと面倒です。
WordPressのデフォルトフィードでの投稿タグの扱い
下記の部分
https://core.trac.wordpress.org/browser/tags/5.5.1/src/wp-includes/feed-rss2.php#L97
the_category_rss( 'rss2' )
で処理してます。
the_category_rss()
https://developer.wordpress.org/reference/functions/the_category_rss/
get_the_category_rss()
を echo してるだけ
get_the_category_rss()
https://developer.wordpress.org/reference/functions/get_the_category_rss/
大まかに説明すると
- 投稿のカテゴリーとタグを全て取得
- 取得したカテゴリー名とタグ名を配列にする
- カテゴリー名とタグ名の配列をループ処理で1つずつ
<category>
に出力
となります
投稿タグだけ何とかしたい
get_the_category_rss()
にフィルターもあるんですけど、、「投稿タグを自動でハッシュタグに変換してSNSに投稿したい」なので、投稿タグだけを処理するのがしんどそうなので、「投稿タグだけのタグ」を追加するのが良さそう。
こう言う時はアクションフックの rss2_item
で追加できるのです。
https://developer.wordpress.org/reference/hooks/rss2_item/
「投稿タグだけのタグ」を追加するコード
良いネームスペースが思いつかなかったのでフィードバリデーターではエラー出ますので注意。
雑なサンプルなので、微調整は必要ですよ。
<?php
add_action( 'rss2_item', 'add_my_rss_node', 10, 1 );
function add_my_rss_node() {
$post_tags = get_the_tags();
$separator = ', ';
$output = '';
if ( $post_tags && ! is_wp_error( $post_tags ) ) {
foreach ( $post_tags as $tag ) {
// とりあえず空白は削除、他にもハッシュタグに使えない文字の変換必要かもしれない
$tagname = str_replace([' ',' '], '', $tag->name );
$output .= '#' . esc_html( $tagname ) . $separator;
}
$output = trim($output, $separator);
}
// ネームスペースいいのないかな
echo '<tags><![CDATA[' . $output . ']]></tags>' . "\n";
}
フィードはこうなる
<item>
の最後の方にハッシュタグ付きになった投稿タグがカンマ区切りで入っていれば成功
<tags><![CDATA[#Shifter, #ShifterAdventCalendar2019, #ShifterGithubPlugin/ThemeInstaller]]></tags>
確認してみよう
ZapierやIFTTTでフィードを取り込んで <tags>
が使えたら成功
現場からは以上です。