再び WelcartとGoogle ショッピングの連動 複数SKU版

先日書いたWelcartとGoogle ショッピングの連動のフィードですが、Googleにエラーを表示されるのが嫌で更にいじって複数SKUに対応してみました。
もうバイクとは程遠いネタばかりでスイマセンm(uu)m

広告

Welcartの複数SKUにも対応させたxml商品フィード

前回のフィードは、上位にあるSKUからデータを出力していて複数SKUには対応出来ないフィードでしたが、Googleショッピングはバリエーション事の登録を推奨しているようでエラーメッセージを出されてしまいます。
そこで、シングルSKUと複数SKUで異なる出力をするようにしてみました。

<?php
/**
 * RSS2 Feed Template for displaying RSS2 Posts feed.
 *
 * @package WordPress
 */
 
header('Content-Type: ' . feed_content_type('rss-http') . '; charset=' . get_option('blog_charset'), true);
$more = 1;
 
echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>'; ?>
<rss version='2.0' xmlns:g='http://base.google.com/ns/1.0'>
	<channel>
	<title><?php bloginfo_rss('name'); wp_title_rss(); ?></title>
	<description><?php bloginfo_rss("description") ?></description>
	<link><?php echo get_option('home'); ?></link>
 
	<?php do_action('rss2_head'); ?>
	<?php while( have_posts()) : the_post(); usces_the_item();?>
	<?php if(usces_sku_num() === 1) : usces_have_skus(); ?>
	<item>
		<title><?php the_title(); ?></title>
		<g:brand><?php echo get_post_meta($post->ID , 'ブランド' ,true); ?></g:brand>
		<g:condition>new</g:condition>
		<description><?php echo get_post_meta($post->ID , '説明' ,true); ?></description>
		<g:id><?php the_ID(); ?></g:id>
		<g:availability><?php if(usces_the_itemZaiko('return') =='在庫有り'){echo 'in stock';}else{$zaiko='out of stock'; echo $zaiko; } ?></g:availability>
		<g:image_link><?php usces_the_itemImageURL(0); ?></g:image_link>
		<link><?php the_permalink_rss() ?></link>
		<g:mpn><?php usces_the_itemCode(); ?></g:mpn>
		<g:price><?php usces_the_firstPrice(); ?></g:price>
		<g:material><?php echo get_post_meta($post->ID , '素材' ,true); ?></g:material>
		<g:google_product_category><?php echo get_post_meta($post->ID , 'googleカテゴリ' ,true); ?></g:google_product_category>
		<g:product_type><?php echo get_post_meta($post->ID , 'ショップカテゴリ' ,true); ?></g:product_type>
		<g:gender><?php echo get_post_meta($post->ID , '性別' ,true); ?></g:gender>
		<g:age_group>年齢(直接の書いたほうが良い)</g:age_group>
		<g:color><?php echo get_post_meta($post->ID , '色' ,true); ?></g:color>
	<?php  do_action('rss2_item'); ?>
	
	</item>

	<?php elseif(usces_sku_num() > 1) : usces_have_skus(); ?>
	<?php do { ?>
	<item>
		<title><?php the_title(); ?></title>
		<g:brand><?php echo get_post_meta($post->ID , 'ブランド' ,true); ?></g:brand>
		<g:condition>new</g:condition>
		<description><?php echo get_post_meta($post->ID , '説明' ,true); ?></description>
		<g:id><?php usces_the_itemSku(); ?></g:id>
		<g:item_group_id><?php the_ID(); ?></g:item_group_id>
		<g:availability><?php if(usces_the_itemZaiko('return') =='在庫有り'){echo 'in stock';}else{$zaiko='out of stock'; echo $zaiko; } ?></g:availability>
		<g:image_link><?php usces_the_itemImageURL(0); ?></g:image_link>
		<link><?php the_permalink_rss() ?></link>
		<g:mpn><?php usces_the_itemCode(); ?></g:mpn>
		<g:price><?php usces_the_firstPrice(); ?></g:price>
		<g:material><?php echo get_post_meta($post->ID , '素材' ,true); ?></g:material>
		<g:google_product_category><?php echo get_post_meta($post->ID , 'googleカテゴリ' ,true); ?></g:google_product_category>
		<g:product_type><?php echo get_post_meta($post->ID , 'ショップカテゴリ' ,true); ?></g:product_type>
		<g:gender><?php echo get_post_meta($post->ID , '性別' ,true); ?></g:gender>
		<g:age_group>年齢(直接の書いたほうが良い)</g:age_group>
		<?php if(usces_the_itemSkuDisp('return') =='Sサイズ'){echo '<g:size>S</g:size>';}
				if(usces_the_itemSkuDisp('return') =='Mサイズ'){echo '<g:size>M</g:size>';}
				if(usces_the_itemSkuDisp('return') =='Lサイズ'){echo '<g:size>L</g:size>';}
				if(usces_the_itemSkuDisp('return') =='LLサイズ'){echo '<g:size>LL</g:size>';}?>
		<g:color><?php $SkuDisp = usces_the_itemSkuDisp('return');
		if(preg_match("/[SML]/", $SkuDisp)){ echo get_post_meta($post->ID , '色' ,true); }else{ echo usces_the_itemSkuDisp(); } ?></g:color>
	<?php  do_action('rss2_item'); ?>
	
	</item>
	<?php } while (usces_have_skus()); ?>
	<?php endif; ?>
	<?php endwhile; ?>
</channel>
</rss>

こんな感じですが、僕PHPって触り始めて3ヶ月位の超独学人間なので、面倒なphpにしてしまった事は分かってます。なんか上手くいかなかったんだもん(汗)
ひとまず、サイズはあるものはGoogleで推奨の通りに出せるように変換。それ以外の複数SKUはカラー属性のアイテムになるでしょうからそうしています。サイズ属性でSKUを出力したものはカスタムフィールド値で出力。
グループIDなるものも必要なので、それをページIDにしました。個別の独自IDはSKUコードになる設定です。
シングルSKUの場合は前回のフィードと同様。

ちなみにこれ、そのままディレクトリに入れてもあんまり機能しないです。それぞれカスタムフィールドを設定する必要がありますし、コピペだけじゃ動きませんのであしからず・・・・。

ついでに、昨日少し調べたらGoogle ショッピングって去年アタリから有料のサービスになってしまったようですね・・・。非常に残念ですがビジネスですから仕方無い事でしょう。
有料に伴い、正直利用するのかは分かりませんが、どうにもエラーを表示されるのが気に入らなくて作り変えてしまったワケです。歳と共に妙な拘りが身に付いて邪魔で仕方ありません。

とは言え非常に勉強になりました。しかし時間も大量に浪費してしまいましたので、少しぐらいは使ってみようかなー・・・。せっかく作ったphpだし。

更についでに、このコード使ってもエラーが出ます。ショップのほうの構造化もチェックするようですので、エラーメッセージを嫌う僕のような人はショップの構造化(スキーマーが推奨っぽい)をやる必要があるようです。
もう一つついでに、どこかにエラーがあるようで、たまに商品を重複して出力させてしまいます。340アイテム分出力して、9アイテムの重複が出てしまいました。
どこが間違ってるのか分かる方、教えて頂けたら嬉しいなぁー 重複自体は破棄されるから別に良いけど(こーゆのは完璧を求めませんw)

もしも、こんな事でWelcartのご発展に役立つならと思って恥ずかしながら公開です。

ではでは・・・

それにしても、僕はどこに向かっているのでしょうか・・・

広告

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です