ショートコード・グッズメモ アフィリエイト

グッズメモ アフィリエイト・WordPressプラグインのソースコード記事の目次WordPress

Shortcode.php


namespace goodsmemo\shortcode;

use goodsmemo\amazon\AmazonAffiliate;
use goodsmemo\rakuten\RakutenAffiliate;
use goodsmemo\exception\IllegalArgumentException;
use goodsmemo\exception\OptionException;
use goodsmemo\exception\HttpRequestException;
use goodsmemo\exception\HttpResponseException;
use goodsmemo\exception\FileNotFoundException;

require_once GOODS_MEMO_DIR . "amazon/AmazonAffiliate.php";
require_once GOODS_MEMO_DIR . "rakuten/RakutenAffiliate.php";
require_once GOODS_MEMO_DIR . "exception/IllegalArgumentException.php";
require_once GOODS_MEMO_DIR . "exception/OptionException.php";
require_once GOODS_MEMO_DIR . "exception/HttpRequestException.php";
require_once GOODS_MEMO_DIR . "exception/HttpResponseException.php";
require_once GOODS_MEMO_DIR . "exception/FileNotFoundException.php";

/**
 * Description of Shortcode
 *
 * @author Goods Memo
 */
class Shortcode {

	public static function makeAffiliateHTML($atts, $content = null) {

		//ショートコードの名前は英小文字、数字、下線を使う必要があります。特にハイフン(ダッシュ)には注意して、使わないのが賢明です。
		//注意: 属性名は大文字と小文字が混在可能ですが、パース後はいつも小文字になります。
		//var_dump($atts);
		$attsMap = shortcode_atts(array(//変数名(属性名) => 初期値
			"service" => "",
			"operation" => "",
			"search_index" => "",
			"keyword" => "",
			"number" => ""), $atts
		);
		extract($attsMap); //例:変数 $service などを作成する

		try {
			if (is_numeric($number) && $number >= 0) {//ゼロ以上とした
; //NetBeansの「エディタ」「フォーマット」で左端に整形されてしまう。
			} else {
				throw new IllegalArgumentException("無効な表示件数:" . $number);
			}

			if ($number == 0) {

				$message = <<< EOD
<p class="gma-zero-ads-displayed-message">広告はありません(表示件数の設定{$number}件)。</p>
EOD;
				return $message;
			}

			$keyword = trim($keyword);
			if (empty($keyword)) {
				throw new IllegalArgumentException("検索キーワードが空です:[" . $keyword . "] number:[" . $number . "]");
			}

			$affiliateHTML;
			switch ($service) {
				case "amazon":

					$affiliateHTML = AmazonAffiliate::makeHTML($operation, $search_index, $keyword, $number);
					break;

				case "rakuten":

					$affiliateHTML = RakutenAffiliate::makeHTML($operation, $keyword, $number);
					break;

				default:

					throw new IllegalArgumentException("無効なサービス名:" . $service);
			}

			return $affiliateHTML;
		} catch (IllegalArgumentException $ex) {

			$message = '<p class="gma-error-message">引数の例外:' . $ex->getMessage() . '</p>';
			return $message;
		} catch (OptionException $ex) {

			$message = '<p class="gma-error-message">オプションデータベースの例外:' . $ex->getMessage() . '</p>';
			return $message;
		} catch (HttpRequestException $ex) {

			$message = '<p class="gma-error-message">HTTPリクエストの例外:' . $ex->getMessage() . '。コード:' . $ex->getCode() . '</p>';
			return $message;
		} catch (HttpResponseException $ex) {

			$message = '<p class="gma-error-message">HTTPレスポンスの例外:' . $ex->getMessage() . '</p>';
			return $message;
		} catch (FileNotFoundException $ex) {

			$message = '<p class="gma-error-message">ファイルが見つからない例外:' . $ex->getMessage() . '</p>';
			return $message;
		} catch (\Exception $ex) {
			//\Exceptionをキャッチすれば、WordPressの「サイトに技術的な問題が発生しています。」を防げるかも??
			$message = '<p class="gma-error-message">例外:' . $ex->getMessage() . '</p>';
			return $message;
		}
	}

}