WordPressのRSSフィードを利用してカラーミーショップへ投稿記事を埋め込む方法です。
2023年10月からカラーミーショップでWordPressを実装できるアプリWPオプションがレギュラープラン以上で無料になりました(以前は月額5,000円税抜)ショップとブログを連携することで、購入導線を増やすのに活用できるかと思います。
実装の流れ
WordPressでRSS取得→function.phpへコードを追加→PHPファイルをサーバへアップ→カラーミーショップへコード埋め込みといった流れです。
WordPressでの対応
WordPressのRSSフィードを取得
WordPressのダッシュボードから[設定]>[表示設定]を選択して、RSSで取得する件数を設定します(デフォルトでは10件)

function.phpにコード追加
function.phpファイルに「RSSのdescriptionにサムネイル画像をセット」するコードを追加します。ファイルの場所はご使用のテーマフォルダ内にあるかと思います。
<例>カラーミーショップのWPオプションを利用した場合
https://your-domain.jp/apps/note/wp-content/themes/ご使用のテーマフォルダ/function.php
function rss_post_thumbnail($content) {
global $post;
if(has_post_thumbnail($post->ID)) {
$content = '<p>' . get_the_post_thumbnail($post->ID) . '</p>' . $content;
}
return $content;
}
add_filter('the_excerpt_rss', 'rss_post_thumbnail');
add_filter('the_content_feed', 'rss_post_thumbnail');
PHPファイルをサーバへアップロード
コード内の[ your-domain.jp ]部分を対象のドメインに書き換え、サーバへアップロードします。WordPressのルートフォルダかテーマフォルダ内がわかりやすいかと思います。
<?php
//エラーを表示してくれるコード 以下2行
//ini_set("display_errors", 1);
//error_reporting(E_ALL);
define ('MAX_NUM', $_GET['max_num']); //表示件数
//以下にRSSフィードを配信しているURLを指定
$rss = simplexml_load_file('https://your-domain.jp/apps/note/feed', 'SimpleXMLElement', LIBXML_NOCDATA);
$i = 0;//カウンタ
//date description thumbは、各自のRSSフィードの状態に応じて書き換える必要がある
foreach($rss->channel->item as $item) {
if ($i >= MAX_NUM) {break;}
$date = date("Y-m-d H:i", strtotime($item->pubDate.'+9hour')); //日時 9時間ずれることがある
$description = $item->description ; //記事概要、適当に加工する必要がある
$thumb = ""; //画像がない場合のURLを指定するとよい
if( preg_match_all('/<img([\w\W]+?)>/is', $item->description, $matches) ){
foreach( $matches[0] as $img ){
if ($img === reset($matches[0])) {//最初の画像にマッチしたもの
if( preg_match('/src=[\'"](.+?(gif|jpe?g|png|webp))[\'"]/i', $img, $m) ){
$thumb = $m[1]; //サムネイル画像
$thumb = preg_replace('/-[0-9]{3}x[0-9]{3}\.(gif|jpe?g|png|webp)$/i', '.$1', $thumb);
}
}
}
}
//文字型でキャストするのはsimplexml_load_fileで取り出した際にobjになっているため
$output[] = array('title' => (string)$item->title,
'link' => (string)$item->link,
'date' => $date,
'desc' => $description,
'thumb' => $thumb);
$i++;
}
//出力用配列にセット
header( 'Content-Type: text/javascript; charset=EUC-JP' );
echo $_GET['callback'] . '(' . json_encode($output). ')';
投稿記事にサムネイル画像が設定されていない場合は、18行目の$thumb にNo Image画像のパスをセットすると、指定の画像が表示されます。
カラーミーショップでの対応
投稿記事の一覧を埋め込む箇所へコードを追加します。jQueryの読み込みが必要ですが、カラーミーショップの場合はすでに読み込まれているので不要です。
<div class="blog-wrapper">
<ul id="blog"></ul>
</div>
<style>
.blog-wrapper {
margin: 100px 0;
}
.blog-wrapper ul {
display: flex;
flex-wrap: wrap;
column-gap: 15px;
row-gap: 40px;
list-style: none;
}
.blog-wrapper li {
width: calc(33.3333% - 10px);
box-sizing: border-box;
}
.blog-date {
font-size: 12px;
padding-top: 5px;
}
</style>
<script>
$(function() {
$.ajax({
type: 'GET',
url: 'https://your-domain.jp/apps/note/get-rss-feed.php?max_num=9&callback=?',
dataType: 'jsonp',
success : function(json) {
// success
$.each(json,function(i,item){
$("#blog").append('<li class="blog-card"><a href="' + item.link + '"><img loading="lazy" src="' + item.thumb + '" alt="' + item.title + '" class="blog-img"><div class="blog-date">' + item.date + '</div><div class="blog-title">' + item.title + '</div></a></li>');
});
}
});
});
</script>
実装例
正しく動作するとこんな感じでカラーミーショップページへ表示されます。フリーページ、トップページのテンプレートなどへ追加でき、体裁はCSSなどで変更して調整します。
カラーミーショップの場合、フリーページを非公開で作成してスタイル調整&動作確認してから、実際に表示予定の箇所へ追加するとよいかと思います。
https://naeco.jp/colorme-rss-feedこちらのページで詳しく解説されています。コードなどほぼ原文のまま参考にさせていただきました。ありがとうございました。

