Twitterのフォローお願いします!更新情報をお伝えします!

Cocoonの画像の拡大効果設定と画像URL一括設定方法

この記事は約4分で読めます。

「ブンブンざむらい」のブログでは、WordPressの無料テーマである「Cocoon」を使用しています。

今回、Cocoonの設定ページ内にある「画像の拡大効果」、 baguetteBox を有効にしました。

しかし、写真貼り付け時に画像のリンクを「メディアファイル」に指定しなければ画像をクリックしても、画像の拡大表示は行われません。

今回はリンク設定をJavascriptで自動化したので紹介します。

(Ad)

自動化した理由

・毎回リンクを設定するのが面倒
・リンク設定抜けが発生する可能性がある
・スマホアプリでリンクの設定が見当たらない
・過去に投稿しているすべての画像にリンクを設定するのは大変

そもそも、画像のリンクを設定する必要がある事を知らなかったです…

デモンストレーション

ブログ記事作成画面の「ブロックを追加」から写真を挿入し、「画像の寸法」を25%に変更しました。

小さく表示されている写真をクリックすると、画像が拡大表示されると思います。

リンクの設定をせずに、正しくbaguetteBoxが機能している事がわかります。

baguetteBoxを有効にする

すでに拡大表示ができる場合はスキップしてください。

Cocoonの設定ページに移動し、baguetteBoxを有効にします。

「Cocoonの設定」⇒「画像」⇒「baguetteBox(軽量・スマホ向け)」⇒「変更をまとめて保存」で画像の拡大効果を使用できます。

baguetteBoxの動作確認

WordPress「新規投稿を追加」の画面で、画像を新しく追加します。

画像追加後、「リンクを挿入」⇒「メディアファイル」をクリックします。

「プレビュー」⇒「新しいタブでプレビュー」を押し、投稿のプレビュー画面へ移動します。

プレビュー画面で表示された画像をクリックし、クリックした画像が拡大表示されていれば問題ありません。

リンクを写真すべてに設定するのは大変なので自動化します。

画像のリンクを自動付与

今回は、JavaScriptを追加する事で画像のリンクを自動付与します。

JavaScriptなので、生成されたHTMLファイルをブラウザ側で書き換えます。

(まぁ、難しい話はここへんでやめましょう)

筆者の環境

Cocoon : 2.5.5
Cocoon Child : 1.1.3
WordPress : 6.1.3
PHP : 7.3.33
Jetpack : 12.3

Cocoon: Single Post (single.php)に追記

single.phpにJavaScriptのコードを貼り付ける事でブログ記事にアクセス際に記述したJavaScriptのコードが実行されます。

single.phpは「外観」⇒「テーマファイルエディタ」⇒「編集するテーマを選択」⇒「Cocoon」⇒「選択」⇒「Single Post (single.php)」で編集可能です。

表示されたコードの下に、画像リンク自動追加用コードを追記していきます。

コードを編集する前にバックアップ(コードのコピー)を取る事をおすすめします。

追記が終わりましたら忘れずに「保存ボタン」を押してください。

コード

Cocoon: Single Post (single.php)に以下のコードを貼り付けます。コード内のコメントは削除して構いません。

以下のコードは、画像にaタグ(リンク)が設定されていない場合にブラウザ側でリンクを設定するコードです。

ご自身の環境に合わせてコードの変更が必要になる可能性があります。

<script>
window.onload = function() {
    var figures = document.getElementsByClassName("wp-block-image");
	for (var i = 0; i < figures.length; i++) {
		var figure = figures[i];

		// figureに対してリンクがあるなら処理をしない
		if(figure.querySelector("a") !== null){
			continue;
		}

		// 画像URLの取得(リサイズ系のパラメータは削除)
		var img = figure.querySelector("img");
		img_src = img.src;
		non_query_img_src = img_src.split("?")[0];

		// 新しくaタグの作成
		var a_tag = document.createElement("a");
		a_tag.href = non_query_img_src;

		// imgタグをaタグで包み込む
		img.parentNode.insertBefore(a_tag, img);
		a_tag.appendChild(img);
	}

    // baguetteBoxにリンクの再読み込み
    baguetteBox.run('.entry-content');
}
</script>

コメント

タイトルとURLをコピーしました