アマゾンの商品を管理画面で管理するようにしたけど、今度は記事への挿入が面倒になったので、記事から参照できるように修正しよう

管理画面にAmazon商品一覧を作ったけど

Amazonアソシエイトのリンク切れ時にリンク更新の作業を緩和するために管理画面上で一元管理できるようにした。

アップデート内容

Amazonアフィリエイトのリンク切れチェック機能を作る

記事中に設置したアフィリエイトリンクの修正は非常に面倒な問題。これに対処するため以前より様々な機能をワードプレスに実装してき…

これはこれで十分に便利ではあるけど弊害として、記事にショートコードを埋め込む際に上図の画面を一度開いてショートコードをコピーする必要がある。

記事を保存して管理画面トップに移動して・・・
めんどくせー!!!

ちたまん

画面切り替えるとせっかく考えていたことも忘れちゃったりするからいやだよね~

ツン子

そうだ!いっそのこと投稿画面に一覧を出してしまおう!

ちたまん

と、いうことで上図の商品一覧を投稿画面から参照できるように修正してみる

完成イメージ

コードの前に完成イメージから

動作イメージ1

記事投稿画面の左側に「TOOL」という小さなウィンドウが表示されている。ここに設置した「Amazon商品一覧」のボタンが今回作成したもの。

ちなみにこのウィンドウは元々ショートコード一覧として以前に作成したものが原型になっている

記事投稿画面にショートコード一覧のメタボックスを追加する

ショートコードは便利だけど数が増えると管理が大変。そんな時は見えるところに一覧を作ろう

そしてこのボタンをクリックすると・・・

動作イメージ2

このように別ウィンドウが表示され事前に登録したAmazonアソシエイトの商品が一覧で確認できる。

「ショートコード」のボタンを押すことで、該当商品のアフィリエイトリンク生成用のショートコードをクリップボードにコピーできる。

この機能によりAmazonアソシエイト商品の一元管理と記事中へのスムーズな挿入を両立できるようになったので、これの作り方を紹介しよう。

と、言っても上記の紹介記事のコードとさして変わらないのでそんなに難しくない

DBに登録されているのでコードは単純

既に商品一覧を登録する仕組みは管理画面のメニューとして実装しているので、ここではカスタムボックスにその内容を表示するだけだ。

MEMO

以下のコードでは「テンプレート一覧」ボタンなどの今回関係ない部分は削除しているのでその辺りの実装などは前述の紹介記事を見てもらいたい

functions.php

<?php
/********************************

	カスタムボックスの設置             
	
********************************/

function add_custom_box(){
	add_meta_box( 
		'custom-box-tool',
		'TOOL',
		'custom_box_tool',
		array('page','post','fr_post'),
		'side',
		'high'
	);
}

add_action( 'add_meta_boxes', 'add_custom_box',1 );

function custom_box_tool($post){
	
	global $wpdb;
	?>
	
	<dl id="btList">
		<dt>データ参照</dt>
		<dd><button id="amzBt" type="button" onClick="showWindow('amzList')">Amazon商品一覧</button></dd>
	</dl>
	
	<div id="amzList" class="floatWindow">
		<label class="closeBt" onClick="showWindow('amzList')">閉じる</label>
		<table>
			<tr>
				<th>COPY</th>
				<th>DP</th>
				<th>BRAND</th>
				<th>TITLE</th>
			</tr>
			<?php
			$sql = "SELECT * FROM ".$wpdb->prefix .'AFF_AMZ_T';
			$results = $wpdb->get_results( $sql );
			
			?>
			<?php foreach($results as $r):?>
			
			<tr class="<?php echo $errCalss ?>">

				<td style="width:120px; text-align:center;">
					<button type="button" onClick="copyClip(this)" value="

該当する商品がみつかりません

">ショートコード</button> </td> <td><?php echo $r->DP_C; ?></td> <td><?php echo $r->BRAND_C; ?></td> <td><?php echo $r->TITLE_C; ?></td> </tr> <?php endforeach; ?> </table> </div> <script> function copyClip(obj){ navigator.clipboard.writeText(obj.value); }; function showWindow(id){ document.getElementById(id).classList.toggle('show'); }; </script>

ウィンドウを作成するといっても、今回はブラウザとしてウィンドウを開いたりは一切しておらずCSSでウィンドウ風のボックスを生成しているだけ。それをボタンを使って表示、非表示を切り替えている。つまり最初からウィンドウは存在しているけど隠しているだけ。65行目のJavascriptでクラス「show」のON,OFFを行っている

あと今回から管理画面用のCSSは別ファイルに用意することにした。

admin.css

@media screen and ( min-width:1280px) {
	#custom-box-tool{

		position:fixed;
		top:20%;
		left:20px;
		border:2px solid #777;
		background-color:rgba(255,255,255,0.6);
	}
	#custom-box-tool .inside{
		padding:0.25rem;
	}
}
#custom-box-tool dl{
	margin-top:0;
}
#custom-box-tool dt{
	background-color:#777;
	color:#fff;
	font-weight:bold;
	margin-bottom:0.5rem;
	padding:0.5rem;
}
#custom-box-tool dd{
	padding:0;
	margin:0.5rem;
}

.floatWindow{
	display:none;
	position:fixed;
	width:900px;
	height:600px;
	overflow:auto;
	inset: 0;
	margin: auto;
    background-color: #fff;
    border: 2px solid #777;
    padding: 0.5rem;
	box-shadow:0 0 1rem rgba(0,0,0,0.7);
}


.show{
	display:block !important;
}

.floatWindow table{
	margin-top:1.5rem;
	width:100%;
}
.floatWindow tr:nth-child(2n){
	background-color:#ddd;
}
.floatWindow tr:nth-child(2n-1){
	background-color:#f0f0f0;
}
.floatWindow td{
	padding:0.5rem;
}
.floatWindow th{
	background-color:#777;
	color:#fff;
}
.closeBt{
	position:absolute;
	top:0.2rem;
	right:0.2rem;
	padding:0.3rem 0.5rem;
	background-color:#e00;
	color:#fff;
	border: 1px solid #777;
	
}

このような感じ。一部セレクタの指定が面倒なものはタグに直接記述している。通常時は「display:none;」にしshowクラスで「display:block;」に書き換えることで表示する仕組み

管理画面用にCSSファイルを読み込むにはfunctions.phpに以下のように書けばOK

function admin_custom_css() {
    echo '<link rel="stylesheet" type="text/css" href="'.get_bloginfo("template_directory").'/css/admin.css">';
}
add_action('admin_head', 'admin_custom_css');

Amazonアフィリエイトリンク関係は一応完成!

今回はあっさりと終わった。とはいえこれまで全4回に渡ってAmazonアフィリエイトについて記事にして来たことを思うと長かった~。

気づけば、全4回もやったんだね。

ツン子

一応は完成だけど、思いつくままに作ったコードだから今後修正は必要だろうね

ちたまん

使っているうちに不満がでたりするもんね

ツン子

とりあえずこれで運用は出来そうだけど、使用していくうちに修正はすると思う。小さな変更は随時修正するけど、また大きな変更をすることがあれば記事にして紹介したいと思う。