「当プラグイン用の商品情報の配列」から、「アフィリエイト商品のHTML」を作成する

「当プラグイン用の商品情報の配列」から、「アフィリエイト商品のHTML」を作成する処理について、PHPソースコードを解説しています。

「アフィリエイト商品のHTML」は、以下の項目を表示するHTMLです。

  • 商品ページへのURL。
  • 商品の画像情報。
  • 商品のタイトル。
  • 商品の価格情報。
  • 商品のポイント倍率情報。
  • 詳細な商品情報。
  • 優待会員の名称。
  • 販売店名。
  • 商品レビュー。

作成された「アフィリエイト商品のHTML」は、アフィリエイト商品表示・WordPressプラグインのショートコードが記述されている場所に、表示されます。

目次
  1. 作成された「アフィリエイト商品のHTML」における、変数の例
  2. 「当プラグイン用の商品情報」から、「1個のアフィリエイト商品」のHTMLを作成する
  3. 「商品名の表示文字数」で切り詰めた「商品のタイトル」を、作成する
  4. 「商品の画像URL」が無い場合、「商品画像は無い」という画像情報を設定する
  5. 「当プラグイン用の商品の価格情報を作成した日時」の文字列を、作成する
  6. 「商品に関連付けられた複数の投稿者」の文字列を、作成する
  7. 「商品レビュー」の文字列を、作成する
  8. 「当プラグイン用の商品情報の配列」から、「アフィリエイト商品のHTML」を作成する
  9. ItemArrayHTMLMaking.phpのソースコード
  10. 【まとめ記事】へのリンク

作成された「アフィリエイト商品のHTML」における、変数の例

public static function makeItemArrayHTML($itemArray,
		ItemHTMLOption $itemHTMLOption) {

中略

	return $itemArrayHTML;
}

makeItemArrayHTML()関数は、

$itemArray配列変数が保持する「当プラグイン用の商品情報の配列」から、「アフィリエイト商品のHTML」を作成します。

$itemArrayHTML変数は、作成された「アフィリエイト商品のHTML」を保持します。

アマゾンの「アフィリエイト商品のHTML」を作成する場合

$itemArrayHTML変数が、アマゾンの「アフィリエイト商品のHTML」を保持する場合、$itemArrayHTML変数の例。

<div class="goodsmemo-amazon-items goodsmemo-items">
<div class="goodsmemo-amazon-item1 goodsmemo-oneItem">

	<div class="imageArea" >
	<a href="https://www.amazon.co.jp/dp/XXXX400276?tag=sample-22&linkCode=osi&th=1&psc=1">
	<img src="https://m.media-amazon.com/images/I/XXXXiVIarbL._SL160_.jpg" alt="プログラミングPHP 第4版" width="125" height="160" />
	</a>
	</div>

	<p class="title"  >
	<a href="https://www.amazon.co.jp/dp/XXXX400276?tag=sample-22&linkCode=osi&th=1&psc=1">プログラミングPHP 第4版</a>
	</p>

	<div class="itemDetailsTable">
		<div class="tableRow" >
		<p class="rowLabel">価格:</p>
		<p class="price">
		<span class="priceValue">4,290 円</span><span class="priceTime">(2023年4月15日 16:58時点<a href="#goodsmemo-amazon-items-footer-2023-04-15-16-58-58-87" class="priceTimeLink" >詳細はこちら</a>)</span>
		</p>
		</div>

		<div class="tableRow" style="display: none;">
		<p class="rowLabel"></p>
		<p class="preferentialMember"></p>
		</div>

		<div class="tableRow" style="display: none;">
		<p class="rowLabel"></p>
		<p class="postage"></p>
		</div>
	</div>

	<div class="itemDetailsTable">
		<div class="tableRow" style="display: none;">
		<p class="rowLabel">ポイント:</p>
		<p class="pointRate"> 倍</p>
		</div>

		<div class="tableRow" style="display: none;">
		<p class="rowLabel"></p>
		<p class="pointRateStartTime">✓開始日時 </p>
		</div>

		<div class="tableRow" style="display: none;">
		<p class="rowLabel"></p>
		<p class="pointRateEndTime">✓終了日時 </p>
		</div>
	</div>

	<div class="itemDetailsTable">
		<div class="tableRow" >
		<p class="rowLabel"></p>
		<p class="contributor">Kevin XXXX(著), Peter XXXX(著), 永井 XXXX(監修), 中野 XXXX(翻訳)</p>
		</div>

		<div class="tableRow" >
		<p class="rowLabel">出版社:</p>
		<p class="manufacturer">XXXXジャパン</p>
		</div>

		<div class="tableRow" >
		<p class="rowLabel">種別:</p>
		<p class="binding">単行本(ソフトカバー)</p>
		</div>

		<div class="tableRow" >
		<p class="rowLabel">販売店:</p>
		<p class="shop">Amazon.co.jp</p>
		</div>
	</div>

	<p class="review">商品の主な機能に関する情報その1。<br>商品の主な機能に関する情報その2。<br>商品の主な機能に関する情報その3。</p>

</div>
<div id="goodsmemo-amazon-items-footer-2023-04-15-16-58-58-87" class="footer">
価格の詳細:価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。
本商品の購入においては、購入の時点でAmazon.co.jpに表示されている価格および発送可能時期の情報が適用されます。
</div>
</div>

アマゾンの「アフィリエイト商品のHTML」、表示例。

楽天市場の「アフィリエイト商品のHTML」を作成する場合

$itemArrayHTML変数が、楽天市場の「アフィリエイト商品のHTML」を保持する場合、$itemArrayHTML変数の例。

(※管理者向けメモ:楽天の結果から、追加する)

「当プラグイン用の商品情報」から、「1個のアフィリエイト商品」のHTMLを作成する

private static function makeOneItemHTML(Item $item, $index,
		ItemHTMLOption $itemHTMLOption, $footerID) {

	$idIndex = $index + 1; // 1から始まる値にする。
	$idPrefix = $itemHTMLOption->getIdPrefix ();

	$pageURL = $item->getPageURL ();

	$imageItem = $item->getImageItem ();
	ItemArrayHTMLMaking::setImageInfoIfURLIsEmpty ( $imageItem );
	$imageURL = $imageItem->getImageURL ();
	$imageWidth = $imageItem->getImageWidth ();
	$imageHeight = $imageItem->getImageHeight ();

	$title = ItemArrayHTMLMaking::makeTitle ( $item, $itemHTMLOption );

	$priceItem = $item->getPriceItem ();
	$priceLabel = $priceItem->getLabel ();
	$price = $priceItem->getPrice ();
	$priceAddition = $priceItem->getPriceAddition ();
	$priceTimeText = ItemArrayHTMLMaking::makePriceTimeText ( $priceItem );
	$postageText = $priceItem->getPostageText ();

	$pointItem = $item->getPointItem ();
	$pointRate = $pointItem->getPointRate ();
	$pointRateStartTime = $pointItem->getPointRateStartTime ();
	$pointRateEndTime = $pointItem->getPointRateEndTime ();

	$productionItem = $item->getProductionItem ();
	$contributorText = ItemArrayHTMLMaking::makeContributorText ( 
			$productionItem );
	$manufacturerLabel = $productionItem->getManufacturerLabel ();
	$manufacturer = $productionItem->getManufacturer ();
	$binding = $productionItem->getBinding ();

	$preferentialMember = $item->getPreferentialMember ();
	$shop = $item->getShop ();

	$reviewText = ItemArrayHTMLMaking::makeReviewText ( $item,
			$itemHTMLOption );

	$_ = function ($s) {
		return $s;
	}; // 展開用のラムダ関数。ヒアドキュメントで定数を展開できる。
	   // 項目の有無によって、表示を制御する。
	$hideIfEmpty = function ($value) {
		if (is_numeric ( $value )) {
			return "";
		}
		if ($value === "") {
			return 'style="display: none;"';
		} else {
			return "";
		}
	};

	$oneItemHTML = <<< EOD
	<div class="{$_(GOODS_MEMO_PREFIX)}-{$idPrefix}-item{$idIndex} {$_(GOODS_MEMO_PREFIX)}-oneItem">
	
		<div class="imageArea" {$hideIfEmpty($imageURL)}>
		<a href="{$pageURL}">
		<img src="{$imageURL}" alt="{$title}" width="{$imageWidth}" height="{$imageHeight}" />
		</a>
		</div>
	
		<p class="title"  {$hideIfEmpty($title)}>
		<a href="{$pageURL}">{$title}</a>
		</p>
	
		<div class="itemDetailsTable">
			<div class="tableRow" {$hideIfEmpty($price)}>
			<p class="rowLabel">{$priceLabel}:</p>
			<p class="price">
			<span class="priceValue">{$price}</span>{$priceAddition}<span class="priceTime">({$priceTimeText}時点<a href="#{$footerID}" class="priceTimeLink" {$hideIfEmpty($footerID)}>詳細はこちら</a>)</span>
			</p>
			</div>
	
			<div class="tableRow" {$hideIfEmpty($preferentialMember)}>
			<p class="rowLabel"></p>
			<p class="preferentialMember">{$preferentialMember}</p>
			</div>
	
			<div class="tableRow" {$hideIfEmpty($postageText)}>
			<p class="rowLabel"></p>
			<p class="postage">{$postageText}</p>
			</div>
		</div>
	
		<div class="itemDetailsTable">
			<div class="tableRow" {$hideIfEmpty($pointRate)}>
			<p class="rowLabel">ポイント:</p>
			<p class="pointRate">{$pointRate} 倍</p>
			</div>
	
			<div class="tableRow" {$hideIfEmpty($pointRateStartTime)}>
			<p class="rowLabel"></p>
			<p class="pointRateStartTime">✓開始日時 {$pointRateStartTime}</p>
			</div>
	
			<div class="tableRow" {$hideIfEmpty($pointRateEndTime)}>
			<p class="rowLabel"></p>
			<p class="pointRateEndTime">✓終了日時 {$pointRateEndTime}</p>
			</div>
		</div>
	
		<div class="itemDetailsTable">
			<div class="tableRow" {$hideIfEmpty($contributorText)}>
			<p class="rowLabel"></p>
			<p class="contributor">{$contributorText}</p>
			</div>
	
			<div class="tableRow" {$hideIfEmpty($manufacturer)}>
			<p class="rowLabel">{$manufacturerLabel}:</p>
			<p class="manufacturer">{$manufacturer}</p>
			</div>
	
			<div class="tableRow" {$hideIfEmpty($binding)}>
			<p class="rowLabel">種別:</p>
			<p class="binding">{$binding}</p>
			</div>
	
			<div class="tableRow" {$hideIfEmpty($shop)}>
			<p class="rowLabel">販売店:</p>
			<p class="shop">{$shop}</p>
			</div>
		</div>
	
		<p class="review" {$hideIfEmpty($reviewText)}>{$reviewText}</p>
	
	</div>
	EOD;

	return $oneItemHTML;
}

アマゾンの「1個のアフィリエイト商品」のHTMLを保持する$oneItemHTML変数の例。

<div class="goodsmemo-amazon-item1 goodsmemo-oneItem">

	<div class="imageArea" >
	<a href="https://www.amazon.co.jp/dp/XXXX400276?tag=sample-22&linkCode=osi&th=1&psc=1">
	<img src="https://m.media-amazon.com/images/I/XXXXiVIarbL._SL160_.jpg" alt="プログラミングPHP 第4版" width="125" height="160" />
	</a>
	</div>

	<p class="title"  >
	<a href="https://www.amazon.co.jp/dp/XXXX400276?tag=sample-22&linkCode=osi&th=1&psc=1">プログラミングPHP 第4版</a>
	</p>

	<div class="itemDetailsTable">
		<div class="tableRow" >
		<p class="rowLabel">価格:</p>
		<p class="price">
		<span class="priceValue">4,290 円</span><span class="priceTime">(2023年4月15日 16:58時点<a href="#goodsmemo-amazon-items-footer-2023-04-15-16-58-58-87" class="priceTimeLink" >詳細はこちら</a>)</span>
		</p>
		</div>

		<div class="tableRow" style="display: none;">
		<p class="rowLabel"></p>
		<p class="preferentialMember"></p>
		</div>

		<div class="tableRow" style="display: none;">
		<p class="rowLabel"></p>
		<p class="postage"></p>
		</div>
	</div>

	<div class="itemDetailsTable">
		<div class="tableRow" style="display: none;">
		<p class="rowLabel">ポイント:</p>
		<p class="pointRate"> 倍</p>
		</div>

		<div class="tableRow" style="display: none;">
		<p class="rowLabel"></p>
		<p class="pointRateStartTime">✓開始日時 </p>
		</div>

		<div class="tableRow" style="display: none;">
		<p class="rowLabel"></p>
		<p class="pointRateEndTime">✓終了日時 </p>
		</div>
	</div>

	<div class="itemDetailsTable">
		<div class="tableRow" >
		<p class="rowLabel"></p>
		<p class="contributor">Kevin XXXX(著), Peter XXXX(著), 永井 XXXX(監修), 中野 XXXX(翻訳)</p>
		</div>

		<div class="tableRow" >
		<p class="rowLabel">出版社:</p>
		<p class="manufacturer">XXXXジャパン</p>
		</div>

		<div class="tableRow" >
		<p class="rowLabel">種別:</p>
		<p class="binding">単行本(ソフトカバー)</p>
		</div>

		<div class="tableRow" >
		<p class="rowLabel">販売店:</p>
		<p class="shop">Amazon.co.jp</p>
		</div>
	</div>

	<p class="review">商品の主な機能に関する情報その1。<br>商品の主な機能に関する情報その2。<br>商品の主な機能に関する情報その3。</p>

</div>

楽天市場の「1個のアフィリエイト商品」のHTMLを保持する$oneItemHTML変数の例。

(※管理者向けメモ:楽天の結果から、追加する)

「1個のアフィリエイト商品」のHTMLを作成する、makeOneItemHTML()関数

makeOneItemHTML()関数は、

$item変数が保持する「当プラグイン用の商品情報」から、「1個のアフィリエイト商品」のHTMLを作成します。

「1個のアフィリエイト商品」のHTMLの「ひな型」は、PHPのヒアドキュメントで記述されています。

HTMLの「ひな型」を示すヒアドキュメント内では、

「当プラグイン用の商品情報」の各項目を保持する各変数が、展開されます。

HTMLの「ひな型」と展開された各変数の値によって、「1個のアフィリエイト商品」のHTMLが出来上がります。

出来上がった「1個のアフィリエイト商品」のHTMLは、ヒアドキュメントの代入先である$oneItemHTML変数に代入されます。

その$oneItemHTML変数は、return文で返されます。

「当プラグイン用の商品情報」を保持するItemクラス

makeOneItemHTML()関数の引数である$item変数は、「当プラグイン用の商品情報」を保持します。

この$item変数は、Itemクラスの変数です。

class Item {

	private $pageURL = "";
	private $imageItem;
	private $title = "";
	private $priceItem;
	private $pointItem;
	private $productionItem;
	private $preferentialMember = ""; //優待会員
	private $shop = "";
	private $reviewItem;

	function __construct() {
		$this->imageItem = new ImageItem();
		$this->priceItem = new PriceItem();
		$this->pointItem = new PointItem();
		$this->productionItem = new ProductionItem(); //例:楽天で設定しない場合、空のProductionItemオブジェクトを使う。nullエラーを防げる。
		$this->reviewItem = new ReviewItem();
	}

以下省略

Itemクラスは、以下の「当プラグイン用の商品情報」を保持します。

Itemクラスのメンバ変数Itemクラスのメンバ変数の説明
$pageURL商品ページへのURLです。
アフィリエイトタグが、URLのクエリパラメーターに付与されています。
$imageItem商品の画像情報。

※$imageInfo、または$imageInfoOfItemという名前にした方が、わかりやすいかもしれません。
$title商品名など、商品のタイトル。
$priceItem商品の価格情報。

※$priceInfo、または$priceInfoOfItemという名前にした方が、わかりやすいかもしれません。
$pointItem商品のポイント倍率情報。

※$pointInfo、または$pointInfoOfItemという名前にした方が、わかりやすいかもしれません。
$productionItem詳細な商品情報。

「当プラグイン用の商品情報」という名称で、すでに「商品情報」という名称が使われているので、「詳細な商品情報」という名称にしました。

※$detailedProductionInfoという名前にした方が、わかりやすいかもしれません。
$preferentialMember優待会員の名称。

例:
アマゾンのプライム会員。
$shop販売店名。
$reviewItem商品レビュー。

商品の主な機能に関する情報。
または、
編集者による論評。

※$productionReviewという名前にした方が、わかりやすいかもしれません。
「当プラグイン用の商品情報」を保持するItemクラス

「商品ページへのURL」のHTMLを作成する

$pageURL = $item->getPageURL ();

中略

<a href="{$pageURL}">
中略
</a>

中略

<a href="{$pageURL}">{$title}</a>

「商品ページへのURL」のHTMLの例。

<a href="https://www.amazon.co.jp/dp/XXXX400276?tag=sample-22&linkCode=osi&th=1&psc=1">
中略
</a>

中略

<a href="https://www.amazon.co.jp/dp/XXXX400276?tag=sample-22&linkCode=osi&th=1&psc=1">プログラミングPHP 第4版</a>

ヒアドキュメント内のHTMLに「商品ページへのURL」を埋め込み、「商品ページへのURL」のHTMLを作成します。

$pageURL変数に、「当プラグイン用の商品情報」の「商品ページへのURL」を、代入します。

ヒアドキュメント内に記述されている、
「商品ページへのURL」のHTMLにおいて、$pageURL変数を展開します。

以上より、「商品ページ」にリンクするaタグを作成します。

「商品の画像情報」のHTMLを作成する

$imageItem = $item->getImageItem ();
ItemArrayHTMLMaking::setImageInfoIfURLIsEmpty ( $imageItem );
$imageURL = $imageItem->getImageURL ();
$imageWidth = $imageItem->getImageWidth ();
$imageHeight = $imageItem->getImageHeight ();

中略

<img src="{$imageURL}" alt="{$title}" width="{$imageWidth}" height="{$imageHeight}" />

「商品の画像情報」のHTMLの例。

<img src="https://m.media-amazon.com/images/I/XXXXiVIarbL._SL160_.jpg" alt="プログラミングPHP 第4版" width="125" height="160" />

ヒアドキュメント内のHTMLに「商品の画像情報」を埋め込み、「商品の画像情報」のHTMLを作成します。

$imageItem変数に、「当プラグイン用の商品情報」の「商品の画像情報」を、代入します。

以下の各変数に、$imageItem変数が保持する各画像情報を代入します。

  • $imageURL変数に、「画像のURL」を代入します。
  • $imageWidth変数に、「画像の幅(ピクセル数)」を代入します。
  • $imageHeight変数に、「画像の高さ(ピクセル数)」を代入します。

ヒアドキュメント内に記述されている、「商品の画像情報」のHTMLにおいて、

  • $imageURL変数
  • $imageWidth変数
  • $imageHeight変数

これらの変数を展開します。

以上より、「商品の画像」を表示するimgタグを作成します。

「商品画像は無い」という画像情報を設定する、ItemArrayHTMLMaking::setImageInfoIfURLIsEmpty()関数について

$imageItem = $item->getImageItem ();
ItemArrayHTMLMaking::setImageInfoIfURLIsEmpty ( $imageItem );

もしも「商品の画像URL」が無い場合、

ItemArrayHTMLMaking::setImageInfoIfURLIsEmpty()関数にて、
$imageItem変数に対して、「商品画像は無い」という画像情報を設定します。

ItemArrayHTMLMaking::setImageInfoIfURLIsEmpty()関数については、

当記事の「見出し」
「商品の画像URL」が無い場合、「商品画像は無い」という画像情報を設定する
を参照してください。

「商品のタイトル」のHTMLを作成する

$title = ItemArrayHTMLMaking::makeTitle ( $item, $itemHTMLOption );

中略

<a href="{$pageURL}">{$title}</a>

「商品のタイトル」のHTMLの例。

<a href="https:// 省略 ">プログラミングPHP 第4版</a>

ヒアドキュメント内のHTMLに「商品のタイトル」を埋め込み、「商品のタイトル」のHTMLを作成します。

$title変数に、「当プラグイン用の商品情報」の「商品のタイトル」を、代入します。

ヒアドキュメント内に記述されている、
「商品のタイトル」のHTMLにおいて、$title変数を展開します。

以上より、aタグのアンカーテキストを作成します。

上記の「商品のタイトル」のHTMLでは、
「商品のタイトル」は、「プログラミングPHP 第4版」という文字列です。

文字列「プログラミングPHP 第4版」は、「商品ページ」にリンクするaタグのアンカーテキストになっています。

「商品名の表示文字数」で切り詰めた「商品のタイトル」を作成する、ItemArrayHTMLMaking::makeTitle()関数について

$title = ItemArrayHTMLMaking::makeTitle ( $item, $itemHTMLOption );

ItemArrayHTMLMaking::makeTitle()関数は、
「商品名の表示文字数」で、「商品のタイトル」を切り詰めた文字列を作成します。

「商品のタイトル」は、$item変数が保持しています。

$title変数に、切り詰めて作成した「商品のタイトル」を代入します。

ItemArrayHTMLMaking::makeTitle()関数については、

当記事の「見出し」
「商品名の表示文字数」で切り詰めた「商品のタイトル」を、作成する
を参照してください。

「商品の価格情報」のHTMLを作成する

$priceItem = $item->getPriceItem ();
$priceLabel = $priceItem->getLabel ();
$price = $priceItem->getPrice ();
$priceAddition = $priceItem->getPriceAddition ();
$priceTimeText = ItemArrayHTMLMaking::makePriceTimeText ( $priceItem );
$postageText = $priceItem->getPostageText ();

中略

<p class="rowLabel">{$priceLabel}:</p>
<p class="price">
<span class="priceValue">{$price}</span>{$priceAddition}<span class="priceTime">({$priceTimeText}時点<a href="#{$footerID}" class="priceTimeLink" {$hideIfEmpty($footerID)}>詳細はこちら</a>)</span>
</p>

中略

<p class="postage">{$postageText}</p>

「商品の価格情報」のHTMLの例。

<p class="rowLabel">価格:</p>
<p class="price">
<span class="priceValue">4,290 円</span><span class="priceTime">(2023年4月15日 16:58時点<a href="#goodsmemo-amazon-items-footer-2023-04-15-16-58-58-87" class="priceTimeLink" >詳細はこちら</a>)</span>
</p>

中略

(※管理者向けメモ:楽天の結果から、追加する)
<p class="postage"></p>

ヒアドキュメント内のHTMLに「商品の価格情報」を埋め込み、「商品の価格情報」のHTMLを作成します。

$priceItem変数に、「当プラグイン用の商品情報」の「商品の価格情報」を、代入します。

以下の各変数に、$priceItem変数が保持する各価格情報を代入します。

  • $priceLabel変数に、「価格の名称」を代入します。
  • $price変数に、「価格」を代入します。
  • $priceAddition変数に、「価格の付け足し情報」を代入します。
  • $priceTimeText変数に、「当プラグイン用の商品の価格情報を作成した日時」を代入します。
  • $postageText変数に、「送料」を代入します。

ヒアドキュメント内に記述されている、「商品の価格情報」のHTMLにおいて、

  • $priceLabel変数
  • $price変数
  • $priceAddition変数
  • $priceTimeText変数
  • $postageText変数

これらの変数を展開します。

以上より、「商品の価格」を表示する

  • pタグ
  • spanタグ
  • aタグ

を作成します。

「当プラグイン用の商品の価格情報を作成した日時」の文字列を作成する、ItemArrayHTMLMaking::makePriceTimeText()関数について

$priceTimeText = ItemArrayHTMLMaking::makePriceTimeText ( $priceItem );

ItemArrayHTMLMaking::makePriceTimeText()関数は、
Unixタイムスタンプの値である「当プラグイン用の商品の価格情報を作成した日時」から、
「当プラグイン用の商品の価格情報を作成した日時」の文字列を、作成します。

例えば、以下のような文字列を作成します。

2023年4月15日 16:58

ItemArrayHTMLMaking::makePriceTimeText()関数については、

当記事の「見出し」
「当プラグイン用の商品の価格情報を作成した日時」の文字列を、作成する
を参照してください。

「価格の詳細」に移動する、価格の「詳細はこちら」aタグ

( 省略 <a href="#{$footerID}" class="priceTimeLink" {$hideIfEmpty($footerID)}>詳細はこちら</a>)

「商品の価格情報」、価格の「詳細はこちら」aタグのHTMLの例。

( 省略 <a href="#goodsmemo-amazon-items-footer-2023-04-15-16-58-58-87" class="priceTimeLink" >詳細はこちら</a>)

「アフィリエイト商品のHTML」の「フッタータグ」の例。

<div id="goodsmemo-amazon-items-footer-2023-04-15-16-58-58-87" class="footer">
価格の詳細:価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。
本商品の購入においては、購入の時点でAmazon.co.jpに表示されている価格および発送可能時期の情報が適用されます。
</div>

価格の「詳細はこちら」aタグは、
「価格の詳細」に関する説明文が記述されている「フッタータグ」に移動するリンクです。

この「フッタータグ」は、「アフィリエイト商品のHTML」の「フッタータグ」です。

価格の「詳細はこちら」aタグでは、ID(識別名)を使ってページ内リンクを作成しています。

このIDは、「価格の詳細」が記述されている「フッタータグ」のIDです。

このIDは、makeOneItemHTML()関数の$footerID引数の値から作られたものです。

ヒアドキュメント内に記述されている、
「商品の価格情報」のHTMLにおいて、$footerID変数を展開します。

なお、「フッタータグ」のIDは、Unixタイムスタンプの値を基に作られた、一意な文字列です。

「商品のポイント倍率情報」のHTMLを作成する

$pointItem = $item->getPointItem ();
$pointRate = $pointItem->getPointRate ();
$pointRateStartTime = $pointItem->getPointRateStartTime ();
$pointRateEndTime = $pointItem->getPointRateEndTime ();

中略

<p class="pointRate">{$pointRate} 倍</p>	
<p class="pointRateStartTime">✓開始日時 {$pointRateStartTime}</p>	
<p class="pointRateEndTime">✓終了日時 {$pointRateEndTime}</p>

「商品のポイント倍率情報」のHTMLの例。

<p class="pointRate"> 倍</p>
<p class="pointRateStartTime">✓開始日時 </p>
<p class="pointRateEndTime">✓終了日時 </p>

(※管理者向けメモ:楽天の結果から、追加する)

ヒアドキュメント内のHTMLに「商品のポイント倍率情報」を埋め込み、「商品のポイント倍率情報」のHTMLを作成します。

$pointItem変数に、「当プラグイン用の商品情報」の「商品のポイント倍率情報」を、代入します。

以下の各変数に、$pointItem変数が保持する各ポイント倍率情報を代入します。

  • $pointRate変数に、「ポイント倍率」を代入します。
  • $pointRateStartTime変数に、「ポイント倍率の開始日時」を代入します。
  • $pointRateEndTime変数に、「ポイント倍率の終了日時」を代入します。

ヒアドキュメント内に記述されている、「商品のポイント倍率情報」のHTMLにおいて、

  • $pointRate変数
  • $pointRateStartTime変数
  • $pointRateEndTime変数

これらの変数を展開します。

以上より、「商品のポイント倍率情報」を表示するpタグを作成します。

「詳細な商品情報」のHTMLを作成する

$productionItem = $item->getProductionItem ();
$contributorText = ItemArrayHTMLMaking::makeContributorText ( 
		$productionItem );
$manufacturerLabel = $productionItem->getManufacturerLabel ();
$manufacturer = $productionItem->getManufacturer ();
$binding = $productionItem->getBinding ();

中略

<p class="contributor">{$contributorText}</p>
<p class="rowLabel">{$manufacturerLabel}:</p>
<p class="manufacturer">{$manufacturer}</p>
<p class="binding">{$binding}</p>

「詳細な商品情報」のHTMLの例。

<p class="contributor">Kevin XXXX(著), Peter XXXX(著), 永井 XXXX(監修), 中野 XXXX(翻訳)</p>
<p class="rowLabel">出版社:</p>
<p class="manufacturer">XXXXジャパン</p>
<p class="binding">単行本(ソフトカバー)</p>

ヒアドキュメント内のHTMLに「詳細な商品情報」を埋め込み、「詳細な商品情報」のHTMLを作成します。

$productionItem変数に、「当プラグイン用の商品情報」の「詳細な商品情報」を、代入します。

以下の各変数に、$productionItem変数が保持する各「詳細な商品情報」を代入します。

  • $contributorText変数に、「商品に関連付けられた複数の投稿者」を代入します。
  • $manufacturerLabel変数に、「製造者ラベル」を代入します。
  • $manufacturer変数に、「製造者」を代入します。
  • $binding変数に、「商品の種別」を代入します。

ヒアドキュメント内に記述されている、「詳細な商品情報」のHTMLにおいて、

  • $contributorText変数
  • $manufacturerLabel変数
  • $manufacturer変数
  • $binding変数

これらの変数を展開します。

以上より、「詳細な商品情報」を表示するpタグを作成します。

「商品に関連付けられた複数の投稿者」の文字列を作成する、ItemArrayHTMLMaking::makeContributorText()関数について

$contributorText = ItemArrayHTMLMaking::makeContributorText ( 
		$productionItem );

ItemArrayHTMLMaking::makeContributorText()関数は、
「商品に関連付けられた投稿者」の配列から、
「商品に関連付けられた複数の投稿者」の文字列を、作成します。

例えば、以下のような文字列を作成します。

Kevin XXXX(著), Peter XXXX(著), 永井 XXXX(監修), 中野 XXXX(翻訳)

ItemArrayHTMLMaking::makeContributorText()関数については、

当記事の「見出し」
「商品に関連付けられた複数の投稿者」の文字列を、作成する
を参照してください。

「優待会員の名称」のHTMLを作成する

$preferentialMember = $item->getPreferentialMember ();

中略

<p class="preferentialMember">{$preferentialMember}</p>

「優待会員の名称」のHTMLの例。

<p class="preferentialMember">✓prime</p>(予想)

(※管理者向けメモ:DeliveryInfo->IsPrimeEligibleメンバ変数を取得できたら、確認すること)

ヒアドキュメント内のHTMLに「優待会員の名称」を埋め込み、「優待会員の名称」のHTMLを作成します。

$preferentialMember変数に、「当プラグイン用の商品情報」の「優待会員の名称」を、代入します。

ヒアドキュメント内に記述されている、
「優待会員の名称」のHTMLにおいて、$preferentialMember変数を展開します。

以上より、「優待会員の名称」を表示するpタグを作成します。

「販売店名」のHTMLを作成する

$shop = $item->getShop ();

中略

<p class="shop">{$shop}</p>

「販売店名」のHTMLの例。

<p class="shop">Amazon.co.jp</p>

ヒアドキュメント内のHTMLに「販売店名」を埋め込み、「販売店名」のHTMLを作成します。

$shop変数に、「当プラグイン用の商品情報」の「販売店名」を、代入します。

ヒアドキュメント内に記述されている、
「販売店名」のHTMLにおいて、$shop変数を展開します。

以上より、「販売店名」を表示するpタグを作成します。

「商品レビュー」のHTMLを作成する

$reviewText = ItemArrayHTMLMaking::makeReviewText ( $item,
		$itemHTMLOption );

中略

<p class="review" {$hideIfEmpty($reviewText)}>{$reviewText}</p>

「商品レビュー」のHTMLの例。

<p class="review">商品の主な機能に関する情報その1。<br>商品の主な機能に関する情報その2。<br>商品の主な機能に関する情報その3。</p>

ヒアドキュメント内のHTMLに「商品レビュー」を埋め込み、「商品レビュー」のHTMLを作成します。

ItemArrayHTMLMaking::makeReviewText()関数は、
「当プラグイン用の商品情報」の「商品レビュー」から、「商品レビュー」の文字列を作成します。

作成された「商品レビュー」の文字列は、

  • 読みやすくするためにbrタグが追加されたり、
  • 「商品説明の表示文字数」で切り詰めたり

など、修正されています。

$reviewText変数に、作成された「商品レビュー」の文字列を、代入します。

ヒアドキュメント内に記述されている、
「商品レビュー」のHTMLにおいて、$reviewText変数を展開します。

以上より、「商品レビュー」を表示するpタグを作成します。

ItemArrayHTMLMaking::makeReviewText()関数については、

当記事の「見出し」
「商品レビュー」の文字列を、作成する
を参照してください。

PHPのヒアドキュメント内で使う無名関数

$_ = function ($s) {
	return $s;
}; // 展開用のラムダ関数。ヒアドキュメントで定数を展開できる。

中略

$oneItemHTML = <<< EOD
<div class="{$_(GOODS_MEMO_PREFIX)}-{$idPrefix}-item{$idIndex} {$_(GOODS_MEMO_PREFIX)}-oneItem">

無名関数で、 GOODS_MEMO_PREFIX定数を展開した例。

<div class="goodsmemo-amazon-item1 goodsmemo-oneItem">

GOODS_MEMO_PREFIX定数の定義。

define ( "GOODS_MEMO_PREFIX", "goodsmemo" );

上記PHPソースコードの

$_ = function ($s) … 省略
は、 PHPのヒアドキュメント内で、定数を展開するために使う無名関数です。

PHPのヒアドキュメント内では定数を展開できないため、無名関数を使って定数を展開しています。

無名関数は、定数の値をreturn文によって返します。
戻り値である定数の値が、ヒアドキュメント内で展開されます。

$hideIfEmpty = function ($value) {
	if (is_numeric ( $value )) {
		return "";
	}
	if ($value === "") {
		return 'style="display: none;"';
	} else {
		return "";
	}
};

中略

<div class="tableRow" {$hideIfEmpty($postageText)}>
<p class="rowLabel"></p>
<p class="postage">{$postageText}</p>
</div>

「商品の価格情報」の「送料」を保持する$postageText変数が空文字の場合、
$hideIfEmpty変数が保持する「無名関数の戻り値」の例。

<div class="tableRow" style="display: none;">
<p class="rowLabel"></p>
<p class="postage"></p>
</div>

$hideIfEmpty変数が保持する無名関数は、無名関数の引数に空文字が指定された場合、
HTMLの要素を非表示にするスタイルシートを、戻り値で返します。

HTMLの要素を非表示にするスタイルシートは、
style="display: none;"です。

<div class="tableRow" {$hideIfEmpty($postageText)}>

「商品の価格情報」の「送料」を保持する$postageText変数において、
送料に関する情報がない場合、つまり$postageText変数が空文字の場合、

$hideIfEmpty変数が保持する無名関数の引数は、空文字になります。

この場合、無名関数は、
戻り値でstyle="display: none;"という文字列を、返します。

よって上記のdivタグは、非表示になります。

PHPのfunctionで定義する無名関数について

無名関数とは、名前を持たない関数のことです。

無名関数は、

  • 変数に代入したり、
  • 他の関数の引数や戻り値として使用したり

できます。

無名関数を定義するには、functionキーワードの後に引数リストを書き、その後に波括弧で囲まれたコードブロックを書きます。

例えば、以下のコードは、無名関数を$func変数に代入しています。

$func = function($name) {
  echo "Hello, $name!";
};

この$func変数は、通常の関数と同じように呼び出すことができます。

$func("Alice"); // Hello, Alice!

「1個のアフィリエイト商品」のHTMLの「ひな型」を、PHPのヒアドキュメントで記述するやり方が良い方法なのか?よくわかりません…

当プラグインのmakeOneItemHTML()関数では、
PHPのヒアドキュメント内で、「1個のアフィリエイト商品」のHTMLの「ひな型」を、記述しました。

PHPのプログラムでHTMLを作成する場合、

ヒアドキュメント内にHTMLの「ひな型」を記述するやり方が、良い方法なのかどうか?
あんまりよくわかりません

  • makeOneItemHTML()関数の行数が増える点。
  • ヒアドキュメント内で展開するための変数の個数が多い点。

このような点が気になっています。

関数の行数については、たぶん1994年頃に、

55行の行数あたりに1個のバグが含まれる可能性がある、
という意見を聞いたことがありました。

何かのプログラミング雑誌に、そんな意見が書かれてあったと思います。

現在でも、なんとなく覚えている意見です。
おそらくC言語のソースコードに対する話題だった、と思います。

あと、不要なHTMLタグに対して、
スタイルシートのstyle="display: none;"を使って非表示にしている点、
この点も気になっています。

不要なHTMLタグは非表示にするよりも、
HTMLタグそのものを削除した方が良い、と思うからです。

$oneItemHTML変数が保持する「HTMLを表す文字列」において、不要なHTMLタグは無い方が良いです。

文字列連結演算子を使って、 HTMLタグを組み立てる方が良いかもしれません

$oneItemHTML変数から、不要なHTMLタグを削除したい場合、
文字列連結演算子 . を使って、HTMLタグや属性を結合する方法が良いかもしれません。

なお、文字列結合演算子を使ってHTMLタグを組み立てる場合、
どんなHTMLタグを作成しているか、わかりにくいかもしれません。

ヒアドキュメント内にHTMLの「ひな型」を記述する方が、どんなHTMLタグを作成しているか、一覧できてわかりやすいです。

「商品名の表示文字数」で切り詰めた「商品のタイトル」を、作成する

private static function makeTitle(Item $item, ItemHTMLOption $itemHTMLOption) {

	$title = $item->getTitle ();
	$titleLength = $itemHTMLOption->getTitleLength ();
	$trimmedTitle = TextUtils::mb_strimwidth ( $title, 0, $titleLength, "…" );
	return $trimmedTitle;
}

「商品のタイトル」について、「商品名の表示文字数」で、「タイトルの文字列」を切り詰めます。

「当プラグイン用の商品情報」を保持する$item変数から、「商品のタイトル」を取得します。

取得した「商品のタイトル」を、$title変数に代入します。

設定画面で設定された「商品名の表示文字数」を、取得する

$titleLength = $itemHTMLOption->getTitleLength ();

$itemHTMLOption変数は、ItemHTMLOptionクラスの変数です。

ItemHTMLOptionクラスは、「商品のHTML作成に関する設定値」を管理するクラスです。

以下の設定値を管理します。

  • 当プラグインの「ショートコードの属性値」で、「商品のHTML作成に関する設定値」。
  • 当プラグインの「アフィリエイトの設定」で、「商品のHTML作成に関する設定値」。

$itemHTMLOption->getTitleLength()メソッドを用いて、
$titleLength変数に、「商品名の表示文字数」を代入します。

「商品名の表示文字数」は、例えば80という値です。
これは、「商品のタイトル」の文字列を「80文字で切り詰めること」を、意味します。

「商品名の表示文字数」は、以下の設定画面で設定されています。

  • 当プラグインの「アフィリエイトの設定」
    • アマゾンの設定
      • 商品名の表示文字数

※関連記事:アフィリエイト商品表示・WordPressプラグイン、アフィリエイトの設定、アマゾンの設定

  • 当プラグインの「アフィリエイトの設定」
    • 楽天の設定
      • 商品名の表示文字数

※関連記事:アフィリエイト商品表示・WordPressプラグイン、アフィリエイトの設定、楽天の設定

「商品名の表示文字数」で、「商品のタイトル」を切り詰める

$trimmedTitle = TextUtils::mb_strimwidth ( $title, 0, $titleLength, "…" );
return $trimmedTitle;

TextUtils::mb_strimwidth()関数は、
$titleLength変数が保持する文字数で、$title変数が保持する文字列を切り詰める関数です。

例えば以下の場合、

  • $titleLength変数が80、
  • $title変数が「商品のタイトル」の文字列、

「商品のタイトル」の文字列を、80文字以内に丸めます。

実際に、「商品のタイトル」の文字列を切り詰めた場合、
文字列の最後に … という三点リーダー文字を、追加します。

$trimmedTitle変数に、切り詰めた「商品のタイトル」を代入します。
その$trimmedTitle変数を、return文で返します。

「商品の画像URL」が無い場合、「商品画像は無い」という画像情報を設定する

private static function setImageInfoIfURLIsEmpty(ImageItem &$imageItem) {

	$imageURL = $imageItem->getImageURL ();
	if (empty ( $imageURL )) {

		$imageURL = plugins_url ( 'images/no-image.png', __FILE__ );
		$imageItem->setImageURL ( $imageURL );

		$imageItem->setImageWidth ( 300 ); // no-image.png の幅
		$imageItem->setImageHeight ( 300 ); // no-image.png の高さ
	}
}

「商品画像は無い」という画像の例。

setImageInfoIfURLIsEmpty()関数の引数である$imageItem変数は、「商品の画像情報」を保持します。

その$imageItem変数が、「商品の画像URL」を保持していない場合、
$imageItem変数に対して、「商品画像は無い」という画像情報を設定します。

setImageInfoIfURLIsEmpty()関数の引数である$imageItem変数は、参照渡しの引数です。

参照渡しなので、$imageItem変数の値を変更したら、呼び出し元の$imageItem変数の値も変更されます。

「商品画像は無い」という画像ファイルのURLを、$imageItem変数に設定する

$imageURL = $imageItem->getImageURL ();
if (empty ( $imageURL )) {

以下省略

$imageURL変数に、「商品の画像URL」を代入します。

「商品の画像URL」が無い場合、$imageURL変数は空文字です。
その場合、if文のempty ( $imageURL )関数がtrueを返し、if文のブロック内が実行されます。

$imageURL = plugins_url ( 'images/no-image.png', __FILE__ );
$imageItem->setImageURL ( $imageURL );

$imageURL変数に、
「商品画像は無い」という画像ファイル、no-image.pngのURLを、代入します。

上記のplugins_url()関数は、no-image.pngファイルのURLを返します。

$imageItem変数に、
$imageURL変数が保持する、「商品画像は無い」という画像ファイルのURLを、設定します。

プラグインのURLを取得するplugins_url()関数

ワードプレスのplugins_url()関数は、プラグインのURLを取得するために使用される関数です。

この関数は、プラグインのファイルパス、またはファイル名を引数として受け取り、そのプラグインのURLを返します。

例えば、以下のコードは、現在実行中のファイルの「ディレクトリのURL」を表示します。

echo plugins_url( '', __FILE__ );

plugins_url()関数は、プラグインのアセットや画像などをロードする際に便利です。

PHP言語の __FILE__ 定数は、現在実行中のスクリプトのファイル名を返す特殊な定数です。

__FILE__ 定数を使うと、スクリプトの場所や設定ファイルのパスなどを簡単に取得できます。

「商品画像は無い」という画像ファイルの幅と高さを、$imageItem変数に設定する

$imageItem->setImageWidth ( 300 ); // no-image.png の幅
$imageItem->setImageHeight ( 300 ); // no-image.png の高さ

「商品画像は無い」という画像ファイル、no-image.pngの大きさは、以下の通りです。

  • 画像の幅は、300(ピクセル数)
  • 画像の高さは、300(ピクセル数)

$imageItem変数に、no-image.pngの幅と高さを設定します。

「当プラグイン用の商品の価格情報を作成した日時」の文字列を、作成する

private static function makePriceTimeText(PriceItem $priceItem) {

	$priceTime = $priceItem->getPriceTime ();
	$priceTimeText = DateTextMaking::makeTimeText ( 
			DateTextMaking::TIME_TEXT_FORMAT, $priceTime );
	return $priceTimeText;
}

「当プラグイン用の商品の価格情報を作成した日時」の文字列を保持する、$priceTimeText変数の例。

2023年4月15日 16:58

Unixタイムスタンプの値である「当プラグイン用の商品の価格情報を作成した日時」から、
「年月日 時分」という形式で、
「当プラグイン用の商品の価格情報を作成した日時」の文字列を、作成します。

$priceItem変数は、「商品の価格情報」を保持します。

$priceItem->getPriceTime()メソッドを用いて、
$priceTime変数に、「当プラグイン用の商品の価格情報を作成した日時」を、代入します。

$priceTime変数は、Unixタイムスタンプの値を保持しています。

DateTextMaking::makeTimeText()関数を用いて、
「年月日 時分」という形式で、
「当プラグイン用の商品の価格情報を作成した日時」の文字列を、作成します。

DateTextMaking::TIME_TEXT_FORMAT定数は、以下の書式を示す文字列です。

DateTextMaking::TIME_TEXT_FORMAT = "Y年n月j日 H:i";

$priceTimeText変数に、
作成された「当プラグイン用の商品の価格情報を作成した日時」の文字列を、代入します。

その$priceTimeText変数を、return文で返します。

「商品に関連付けられた複数の投稿者」の文字列を、作成する

private static function makeContributorText(ProductionItem $productionItem) {

	$contributorArray = $productionItem->getContributorArray ();
	$contributorText = implode ( ", ", $contributorArray );
	return $contributorText;
}

「商品に関連付けられた複数の投稿者」の文字列を保持する、$contributorText変数の例。

Kevin XXXX(著), Peter XXXX(著), 永井 XXXX(監修), 中野 XXXX(翻訳)

「商品に関連付けられた投稿者」の配列から、
「商品に関連付けられた複数の投稿者」の文字列を、作成します。

$productionItem変数は、「詳細な商品情報」を保持します。

$productionItem->getContributorArray()メソッドを用いて、
$contributorArray配列の変数に、「商品に関連付けられた投稿者」の配列を、代入します。

「$contributorArray配列の変数」の例。

("Kevin XXXX(著)", "Peter XXXX(著)", "永井 XXXX(監修)","中野 XXXX(翻訳)")

implode()関数を用いて配列の要素を結合して、「商品に関連付けられた複数の投稿者」の文字列を作成します。

$contributorText変数に、
作成された「商品に関連付けられた複数の投稿者」の文字列を、代入します。

その$contributorText変数を、return文で返します。

配列の要素を結合して文字列を作るimplode()関数

PHPのimplode()関数は、配列の要素を結合して文字列を作る関数です。

この関数は、

  • 第一引数に区切り文字
  • 第二引数に配列

を指定します。

区切り文字は、結合された文字列の各要素の間に挿入されます。

例えば、以下のコードでは、$colorsという配列を","で区切って、文字列に変換しています。

$colors = array("赤", "青", "緑");
$string = implode(",", $colors);
echo $string; // 赤,青,緑

「商品レビュー」の文字列を、作成する

private static function makeReviewText(Item $item,
		ItemHTMLOption $itemHTMLOption) {

	$reviewItem = $item->getReviewItem ();
	$reviewItemHTMLOption = $itemHTMLOption->getReviewItemHTMLOption ();
	$reviewText = ReviewItemHTMLUtils::makeFitReviewText ( $reviewItem,
			$reviewItemHTMLOption );
	return $reviewText;
}

「商品レビュー」の文字列を保持する、$reviewText変数の例。

商品の主な機能に関する情報その1。<br>商品の主な機能に関する情報その2。<br>商品の主な機能に関する情報その3。

「当プラグイン用の商品情報」の「商品レビュー」から、「商品レビュー」の文字列を作成します。

$item変数は、「当プラグイン用の商品情報」を保持します。

$item->getReviewItem()メソッドを用いて、$reviewItem変数に、「商品レビュー」を代入します。

「商品レビューのHTML作成」に関する設定値を、取得する

$reviewItemHTMLOption = $itemHTMLOption->getReviewItemHTMLOption ();

$itemHTMLOption変数は、ItemHTMLOptionクラスの変数です。

ItemHTMLOptionクラスは、「商品のHTML作成に関する設定値」を管理するクラスです。

以下の設定値を管理します。

  • 当プラグインの「ショートコードの属性値」で、「商品のHTML作成に関する設定値」。
  • 当プラグインの「アフィリエイトの設定」で、「商品のHTML作成に関する設定値」。

$itemHTMLOption->getReviewItemHTMLOption()を用いて、
$reviewItemHTMLOption変数に、ReviewItemHTMLOptionクラスの変数を、代入します。

ReviewItemHTMLOptionクラスは、「商品レビューのHTML作成」に関する設定値を管理するクラスです。

例えば、「商品説明の表示文字数」という設定値を管理します。

この「商品説明の表示文字数」によって、「商品レビュー」の文字列の文字数が決まります。

例えば「商品説明の表示文字数」が120の場合、
「商品レビュー」の文字列は、120文字以内に切り詰められます。

「商品説明の表示文字数」は、以下の設定画面で設定されています。

  • 当プラグインの「アフィリエイトの設定」
    • アマゾンの設定
      • 商品説明の表示文字数

※関連記事:アフィリエイト商品表示・WordPressプラグイン、アフィリエイトの設定、アマゾンの設定

  • 当プラグインの「アフィリエイトの設定」
    • 楽天の設定
      • 商品説明の表示文字数

※関連記事:アフィリエイト商品表示・WordPressプラグイン、アフィリエイトの設定、楽天の設定

「商品レビューのHTML作成」に関する設定値を考慮して、「商品レビュー」の文字列を作成する

$reviewText = ReviewItemHTMLUtils::makeFitReviewText ( $reviewItem,
		$reviewItemHTMLOption );
return $reviewText;

ReviewItemHTMLUtils::makeFitReviewText()関数は、
「商品レビューのHTML作成」に関する設定値を考慮して、
「商品レビュー」の文字列を作成する関数です。

考慮する点は、以下の点などです。

  • 「商品レビュー」を読みやすくするために、brタグを追加する。
  • 「商品説明の表示文字数」で、「商品レビュー」の文字列を切り詰める。

$reviewText変数に、作成された「商品レビュー」の文字列を、代入します。
その$reviewText変数を、return文で返します。

「当プラグイン用の商品情報の配列」から、「アフィリエイト商品のHTML」を作成する

public static function makeItemArrayHTML($itemArray,
		ItemHTMLOption $itemHTMLOption) {

	$_ = function ($s) {
		return $s;
	}; // 展開用のラムダ関数。ヒアドキュメントで定数を展開できる。

	$idPrefix = $itemHTMLOption->getIdPrefix ();
	$itemArrayHTML = <<< EOD
	<div class="{$_(GOODS_MEMO_PREFIX)}-{$idPrefix}-items {$_(GOODS_MEMO_PREFIX)}-items">
	EOD;

	$itemCount = count ( $itemArray );
	if ($itemCount <= 0) {

		$itemArrayHTML .= <<< EOD
		<p>{$_(ItemArrayHTMLMaking::NO_APPLICABLE_PRODUCT)}</p>
		</div>
		EOD;
		return $itemArrayHTML;
	}

	$footerHTMLInfo = FooterHTMLUtils::makeFooterHTMLInfo ( $itemHTMLOption );
	$footerID = $footerHTMLInfo->getFooterID ();

	for($index = 0; $index < $itemCount; $index ++) {

		$item = $itemArray [$index];
		$oneItemHTML = ItemArrayHTMLMaking::makeOneItemHTML ( $item, $index,
				$itemHTMLOption, $footerID );
		$itemArrayHTML .= $oneItemHTML;
	}

	$footerDiv = $footerHTMLInfo->getFooterDiv ();
	$itemArrayHTML .= $footerDiv;
	$itemArrayHTML .= "</div>";

	return $itemArrayHTML;
}

makeItemArrayHTML()関数の引数である$itemArray配列の変数は、「当プラグイン用の商品情報の配列」を保持します。

$itemArray配列変数の例については、以下の関連記事を参照してください。

※関連記事:「アマゾン商品の検索結果」から、「当プラグイン用の商品情報の配列」を作成する、「当プラグイン用の商品情報の配列」を保持する$itemArray配列変数の例

(※管理者向けメモ:楽天の結果から、追加する)

$itemArrayHTML変数は、「アフィリエイト商品のHTML」を保持します。

$itemArrayHTML変数の例については、

当記事の「見出し」
作成された「アフィリエイト商品のHTML」における、変数の例
を参照してください。

makeItemArrayHTML()関数は、
「当プラグイン用の商品情報の配列」から、「アフィリエイト商品のHTML」を作成します。

「当プラグイン用の商品情報」の個数と、同じ個数の「1個のアフィリエイト商品」のHTMLを、作成する

$itemCount = count ( $itemArray );

中略

$footerHTMLInfo = FooterHTMLUtils::makeFooterHTMLInfo ( $itemHTMLOption );
$footerID = $footerHTMLInfo->getFooterID ();

for($index = 0; $index < $itemCount; $index ++) {

	$item = $itemArray [$index];
	$oneItemHTML = ItemArrayHTMLMaking::makeOneItemHTML ( $item, $index,
			$itemHTMLOption, $footerID );
	$itemArrayHTML .= $oneItemHTML;
}

for文のループ処理によって、
「当プラグイン用の商品情報」の個数と、
同じ個数の「1個のアフィリエイト商品」のHTMLを、作成します。

作成した「1個のアフィリエイト商品」のHTMLを、$itemArrayHTML変数に繰り返し結合してゆきます。

$itemCount = count ( $itemArray );

PHPのcount()関数を用いて、
$itemCount変数に、「当プラグイン用の商品情報の配列」の要素数を代入します。

for($index = 0; $index < $itemCount; $index ++) {

	$item = $itemArray [$index];
	$oneItemHTML = ItemArrayHTMLMaking::makeOneItemHTML ( $item, $index,
			$itemHTMLOption, $footerID );
	$itemArrayHTML .= $oneItemHTML;
}

$itemCount変数の値だけ、つまり「当プラグイン用の商品情報の配列」の要素の数だけ、for文のループ処理を行います。

for文のループ処理では、「1個のアフィリエイト商品」のHTMLを、繰り返し作成します。

$itemArray配列の変数は、「当プラグイン用の商品情報の配列」を保持します。

$item変数に、$itemArray配列の変数から$index番目の要素を、代入します。
$item変数は、$index番目の「当プラグイン用の商品情報」を保持します。

ItemArrayHTMLMaking::makeOneItemHTML()関数は、
「当プラグイン用の商品情報」から、
「1個のアフィリエイト商品」のHTMLを作成する関数です。

ItemArrayHTMLMaking::makeOneItemHTML()関数の引数に、$item変数を渡して、
$index番目の「当プラグイン用の商品情報」から、
「1個のアフィリエイト商品」のHTMLを作成します。

作成した「1個のアフィリエイト商品」のHTMLを、$oneItemHTML変数に代入します。
その$oneItemHTML変数を、$itemArrayHTML変数に結合します。

for文のループ処理において、$oneItemHTML変数を$itemArrayHTML変数に、繰り返し結合してゆきます。

for文のループ処理が終了後、$itemArrayHTML変数は、作成途中の「アフィリエイト商品のHTML」を保持します。

ループ処理後の$itemArrayHTML変数は、
「当プラグイン用の商品情報」の個数と同じ個数の「1個のアフィリエイト商品」のHTMLを、
保持しています。

$oneItemHTML変数の例については、

当記事の「見出し」
「当プラグイン用の商品情報」から、「1個のアフィリエイト商品」のHTMLを作成する
を参照してください。

$itemArrayHTML変数の例については、

当記事の「見出し」
作成された「アフィリエイト商品のHTML」における、変数の例
を参照してください。

フッターのdivタグを特定するID(識別名)

$footerID = $footerHTMLInfo->getFooterID ();

$footerID変数の例。

goodsmemo-amazon-items-footer-2023-04-15-16-58-58-87

$footerID変数は、フッターのdivタグを特定するID(識別名)です。

$footerID変数については、

当記事の「見出し」
「価格の詳細」に移動する、価格の「詳細はこちら」aタグ
を参照してください。

「アフィリエイト商品のHTML」の「先頭のdivタグ」を、作成する

$_ = function ($s) {
	return $s;
}; // 展開用のラムダ関数。ヒアドキュメントで定数を展開できる。

中略

$idPrefix = $itemHTMLOption->getIdPrefix ();
$itemArrayHTML = <<< EOD
<div class="{$_(GOODS_MEMO_PREFIX)}-{$idPrefix}-items {$_(GOODS_MEMO_PREFIX)}-items">
EOD;

「アフィリエイト商品のHTML」の「先頭のdivタグ」の例。

<div class="goodsmemo-amazon-items goodsmemo-items">

GOODS_MEMO_PREFIX定数の定義。

define ( "GOODS_MEMO_PREFIX", "goodsmemo" );

「アフィリエイト商品のHTML」の「先頭のdivタグ」を、作成します。

$idPrefix変数に、識別名を代入します。
この識別名は、例えばアマゾンを意味する場合、amazonという文字列になります。

$itemArrayHTML変数に、「アフィリエイト商品のHTML」の「先頭のdivタグ」を、代入します。

ヒアドキュメント内に記述されている、「アフィリエイト商品のHTML」の「先頭のdivタグ」のHTMLにおいて、

  • GOODS_MEMO_PREFIX定数
  • $idPrefix変数

これらの定数や変数を展開します。

以上より、「アフィリエイト商品のHTML」の「先頭のdivタグ」を作成します。

GOODS_MEMO_PREFIX定数を展開する無名関数について

上記PHPソースコードの

$_ = function ($s) … 省略は、 PHPのヒアドキュメント内で、GOODS_MEMO_PREFIX定数を展開するために使う無名関数です。

無名関数については、

当記事の「見出し」
PHPのヒアドキュメント内で使う無名関数
を参照してください。

「アフィリエイト商品のHTML」の「フッタータグ」を、「アフィリエイト商品のHTML」に結合する

$footerDiv = $footerHTMLInfo->getFooterDiv ();
$itemArrayHTML .= $footerDiv;
$itemArrayHTML .= "</div>";

return $itemArrayHTML;

「アフィリエイト商品のHTML」の「フッタータグ」を保持する$footerDiv変数の例。

<div id="goodsmemo-amazon-items-footer-2023-04-15-16-58-58-87" class="footer">
価格の詳細:価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。
本商品の購入においては、購入の時点でAmazon.co.jpに表示されている価格および発送可能時期の情報が適用されます。
</div>

「アフィリエイト商品のHTML」の「フッタータグ」を、「アフィリエイト商品のHTML」に結合します。

divの終了タグを結合して、「アフィリエイト商品のHTML」を完成させます。

$footerHTMLInfo->getFooterDiv()メソッドを用いて、
$footerDiv変数に、「アフィリエイト商品のHTML」の「フッタータグ」を代入します。

作成途中の$itemArrayHTML変数に、$footerDiv変数が保持する「フッタータグ」を、結合します。

作成途中の$itemArrayHTML変数に、divの終了タグを結合します。

以上より、$itemArrayHTML変数は、完成した「アフィリエイト商品のHTML」を保持します。
その$itemArrayHTML変数を、return文で返します。

「当プラグイン用の商品情報」が無い場合、商品が無いことを示す「アフィリエイト商品のHTML」を作成する

$_ = function ($s) {
	return $s;
}; // 展開用のラムダ関数。ヒアドキュメントで定数を展開できる。

中略

$itemCount = count ( $itemArray );
if ($itemCount <= 0) {

	$itemArrayHTML .= <<< EOD
	<p>{$_(ItemArrayHTMLMaking::NO_APPLICABLE_PRODUCT)}</p>
	</div>
	EOD;
	return $itemArrayHTML;
}

NO_APPLICABLE_PRODUCT定数。

const NO_APPLICABLE_PRODUCT = "該当する商品は、ありませんでした。";

「当プラグイン用の商品情報」が無い場合、
商品が無いことを示す「アフィリエイト商品のHTML」を作成します。

PHPのcount()関数を用いて、
$itemCount変数に、「当プラグイン用の商品情報の配列」の要素数を代入します。

if ($itemCount <= 0) {

	$itemArrayHTML .= <<< EOD
	<p>{$_(ItemArrayHTMLMaking::NO_APPLICABLE_PRODUCT)}</p>
	</div>
	EOD;
	return $itemArrayHTML;
}

$itemCount変数の値が0の場合、if文の条件が成り立ちます。
if文のブロック内の処理が、実行されます。

この場合、「当プラグイン用の商品情報の配列」の要素数が0個であり、
「当プラグイン用の商品情報」が無い場合と言えます。

よって、商品が無いことを示す「アフィリエイト商品のHTML」を作成します。

ヒアドキュメント内に記述されている、
商品が無いことを示す「アフィリエイト商品のHTML」において、
NO_APPLICABLE_PRODUCT定数を展開します。

作成した、商品が無いことを示す「アフィリエイト商品のHTML」を、$itemArrayHTML変数に結合します。

その$itemArrayHTML変数を、return文で返します。

NO_APPLICABLE_PRODUCT定数を展開する無名関数について

上記PHPソースコードの

$_ = function ($s) … 省略は、 PHPのヒアドキュメント内で、NO_APPLICABLE_PRODUCT定数を展開するために使う無名関数です。

無名関数については、

当記事の「見出し」
PHPのヒアドキュメント内で使う無名関数
を参照してください。

ItemArrayHTMLMaking.phpのソースコード

<?php

namespace goodsmemo\item\html;

use goodsmemo\item\Item;
use goodsmemo\item\ImageItem;
use goodsmemo\item\PriceItem;
use goodsmemo\item\ProductionItem;
use goodsmemo\item\html\ItemHTMLOption;
use goodsmemo\item\html\ReviewItemHTMLUtils;
use goodsmemo\item\html\FooterHTMLUtils;
use goodsmemo\date\DateTextMaking;
use goodsmemo\text\TextUtils;

require_once GOODS_MEMO_DIR . "item/Item.php";
require_once GOODS_MEMO_DIR . "item/ImageItem.php";
require_once GOODS_MEMO_DIR . "item/PriceItem.php";
require_once GOODS_MEMO_DIR . "item/ProductionItem.php";
require_once GOODS_MEMO_DIR . "item/html/ItemHTMLOption.php";
require_once GOODS_MEMO_DIR . "item/html/ReviewItemHTMLUtils.php";
require_once GOODS_MEMO_DIR . "item/html/FooterHTMLUtils.php";
require_once GOODS_MEMO_DIR . "date/DateTextMaking.php";
require_once GOODS_MEMO_DIR . "text/TextUtils.php";

class ItemArrayHTMLMaking {
	const NO_APPLICABLE_PRODUCT = "該当する商品は、ありませんでした。";

	public static function makeItemArrayHTML($itemArray,
			ItemHTMLOption $itemHTMLOption) {

		$_ = function ($s) {
			return $s;
		}; // 展開用のラムダ関数。ヒアドキュメントで定数を展開できる。

		$idPrefix = $itemHTMLOption->getIdPrefix ();
		$itemArrayHTML = <<< EOD
		<div class="{$_(GOODS_MEMO_PREFIX)}-{$idPrefix}-items {$_(GOODS_MEMO_PREFIX)}-items">
		EOD;

		$itemCount = count ( $itemArray );
		if ($itemCount <= 0) {

			$itemArrayHTML .= <<< EOD
			<p>{$_(ItemArrayHTMLMaking::NO_APPLICABLE_PRODUCT)}</p>
			</div>
			EOD;
			return $itemArrayHTML;
		}

		$footerHTMLInfo = FooterHTMLUtils::makeFooterHTMLInfo ( $itemHTMLOption );
		$footerID = $footerHTMLInfo->getFooterID ();

		for($index = 0; $index < $itemCount; $index ++) {

			$item = $itemArray [$index];
			$oneItemHTML = ItemArrayHTMLMaking::makeOneItemHTML ( $item, $index,
					$itemHTMLOption, $footerID );
			$itemArrayHTML .= $oneItemHTML;
		}

		$footerDiv = $footerHTMLInfo->getFooterDiv ();
		$itemArrayHTML .= $footerDiv;
		$itemArrayHTML .= "</div>";

		return $itemArrayHTML;
	}

	private static function makeOneItemHTML(Item $item, $index,
			ItemHTMLOption $itemHTMLOption, $footerID) {

		$idIndex = $index + 1; // 1から始まる値にする。
		$idPrefix = $itemHTMLOption->getIdPrefix ();

		$pageURL = $item->getPageURL ();

		$imageItem = $item->getImageItem ();
		ItemArrayHTMLMaking::setImageInfoIfURLIsEmpty ( $imageItem );
		$imageURL = $imageItem->getImageURL ();
		$imageWidth = $imageItem->getImageWidth ();
		$imageHeight = $imageItem->getImageHeight ();

		$title = ItemArrayHTMLMaking::makeTitle ( $item, $itemHTMLOption );

		$priceItem = $item->getPriceItem ();
		$priceLabel = $priceItem->getLabel ();
		$price = $priceItem->getPrice ();
		$priceAddition = $priceItem->getPriceAddition ();
		$priceTimeText = ItemArrayHTMLMaking::makePriceTimeText ( $priceItem );
		$postageText = $priceItem->getPostageText ();

		$pointItem = $item->getPointItem ();
		$pointRate = $pointItem->getPointRate ();
		$pointRateStartTime = $pointItem->getPointRateStartTime ();
		$pointRateEndTime = $pointItem->getPointRateEndTime ();

		$productionItem = $item->getProductionItem ();
		$contributorText = ItemArrayHTMLMaking::makeContributorText ( 
				$productionItem );
		$manufacturerLabel = $productionItem->getManufacturerLabel ();
		$manufacturer = $productionItem->getManufacturer ();
		$binding = $productionItem->getBinding ();

		$preferentialMember = $item->getPreferentialMember ();
		$shop = $item->getShop ();

		$reviewText = ItemArrayHTMLMaking::makeReviewText ( $item,
				$itemHTMLOption );

		$_ = function ($s) {
			return $s;
		}; // 展開用のラムダ関数。ヒアドキュメントで定数を展開できる。
		   // 項目の有無によって、表示を制御する。
		$hideIfEmpty = function ($value) {
			if (is_numeric ( $value )) {
				return "";
			}
			if ($value === "") {
				return 'style="display: none;"';
			} else {
				return "";
			}
		};

		$oneItemHTML = <<< EOD
		<div class="{$_(GOODS_MEMO_PREFIX)}-{$idPrefix}-item{$idIndex} {$_(GOODS_MEMO_PREFIX)}-oneItem">
		
			<div class="imageArea" {$hideIfEmpty($imageURL)}>
			<a href="{$pageURL}">
			<img src="{$imageURL}" alt="{$title}" width="{$imageWidth}" height="{$imageHeight}" />
			</a>
			</div>
		
			<p class="title"  {$hideIfEmpty($title)}>
			<a href="{$pageURL}">{$title}</a>
			</p>
		
			<div class="itemDetailsTable">
				<div class="tableRow" {$hideIfEmpty($price)}>
				<p class="rowLabel">{$priceLabel}:</p>
				<p class="price">
				<span class="priceValue">{$price}</span>{$priceAddition}<span class="priceTime">({$priceTimeText}時点<a href="#{$footerID}" class="priceTimeLink" {$hideIfEmpty($footerID)}>詳細はこちら</a>)</span>
				</p>
				</div>
		
				<div class="tableRow" {$hideIfEmpty($preferentialMember)}>
				<p class="rowLabel"></p>
				<p class="preferentialMember">{$preferentialMember}</p>
				</div>
		
				<div class="tableRow" {$hideIfEmpty($postageText)}>
				<p class="rowLabel"></p>
				<p class="postage">{$postageText}</p>
				</div>
			</div>
		
			<div class="itemDetailsTable">
				<div class="tableRow" {$hideIfEmpty($pointRate)}>
				<p class="rowLabel">ポイント:</p>
				<p class="pointRate">{$pointRate} 倍</p>
				</div>
		
				<div class="tableRow" {$hideIfEmpty($pointRateStartTime)}>
				<p class="rowLabel"></p>
				<p class="pointRateStartTime">✓開始日時 {$pointRateStartTime}</p>
				</div>
		
				<div class="tableRow" {$hideIfEmpty($pointRateEndTime)}>
				<p class="rowLabel"></p>
				<p class="pointRateEndTime">✓終了日時 {$pointRateEndTime}</p>
				</div>
			</div>
		
			<div class="itemDetailsTable">
				<div class="tableRow" {$hideIfEmpty($contributorText)}>
				<p class="rowLabel"></p>
				<p class="contributor">{$contributorText}</p>
				</div>
		
				<div class="tableRow" {$hideIfEmpty($manufacturer)}>
				<p class="rowLabel">{$manufacturerLabel}:</p>
				<p class="manufacturer">{$manufacturer}</p>
				</div>
		
				<div class="tableRow" {$hideIfEmpty($binding)}>
				<p class="rowLabel">種別:</p>
				<p class="binding">{$binding}</p>
				</div>
		
				<div class="tableRow" {$hideIfEmpty($shop)}>
				<p class="rowLabel">販売店:</p>
				<p class="shop">{$shop}</p>
				</div>
			</div>
		
			<p class="review" {$hideIfEmpty($reviewText)}>{$reviewText}</p>
		
		</div>
		EOD;

		return $oneItemHTML;
	}

	private static function makeTitle(Item $item, ItemHTMLOption $itemHTMLOption) {

		$title = $item->getTitle ();
		$titleLength = $itemHTMLOption->getTitleLength ();
		$trimmedTitle = TextUtils::mb_strimwidth ( $title, 0, $titleLength, "…" );
		return $trimmedTitle;
	}

	private static function setImageInfoIfURLIsEmpty(ImageItem &$imageItem) {

		$imageURL = $imageItem->getImageURL ();
		if (empty ( $imageURL )) {

			$imageURL = plugins_url ( 'images/no-image.png', __FILE__ );
			$imageItem->setImageURL ( $imageURL );

			$imageItem->setImageWidth ( 300 ); // no-image.png の幅
			$imageItem->setImageHeight ( 300 ); // no-image.png の高さ
		}
	}

	private static function makePriceTimeText(PriceItem $priceItem) {

		$priceTime = $priceItem->getPriceTime ();
		$priceTimeText = DateTextMaking::makeTimeText ( 
				DateTextMaking::TIME_TEXT_FORMAT, $priceTime );
		return $priceTimeText;
	}

	private static function makeContributorText(ProductionItem $productionItem) {

		$contributorArray = $productionItem->getContributorArray ();
		$contributorText = implode ( ", ", $contributorArray );
		return $contributorText;
	}

	private static function makeReviewText(Item $item,
			ItemHTMLOption $itemHTMLOption) {

		$reviewItem = $item->getReviewItem ();
		$reviewItemHTMLOption = $itemHTMLOption->getReviewItemHTMLOption ();
		$reviewText = ReviewItemHTMLUtils::makeFitReviewText ( $reviewItem,
				$reviewItemHTMLOption );
		return $reviewText;
	}
}

【まとめ記事】へのリンク

【まとめ記事】アマゾンの商品を表示する場合、「アフィリエイト商品表示・WordPressプラグイン」のPHPソースコード解説

「アフィリエイト商品表示・WordPressプラグイン」を用いて、アマゾンの商品を表示する処理について、PHPソースコードを解説しています。