ブログ更新ってめんどくさい

ブログ更新は面倒くさい。

そんなこと分かり切っている。

なかでも面倒なことの1つにアイキャッチ画像の選定がある。

面倒なことを楽にできるのがエンジニアの特権だ。

ということでアイキャッチ画像を簡単に作れるようにした。

作成されるアイキャッチ画像

本ツールを作成できるアイキャッチ画像はこんな感じ。

「本ツールを作成できるアイキャッチ画像」の部分を簡単に変更できる。

作成するうえでの考え方

  • JavaScriptのCanvasに背景画像を描画する
  • その上にCanvas で文字を書く

作成したコード

<div id="creatEyeCatch">
    <div class="input">
      <input type="text" id="input" placeholder="記事タイトルを記入する">
    </div>
    <canvas class="canvas" id="canvas--background" width="788px" height="486px"></canvas>
    <div class="operation">
      <button id="deleteTitle">タイトルを削除</button>
    </div>
  </div>
<script>
  // var
  const deleteTitle = document.getElementById('deleteTitle')


  // 背景CANVASの作成
  const canvasGround = document.getElementById('canvas--background')
  const ctxGround = canvasGround.getContext('2d')
  const nove = new Image();
  nove.src = '画像のパス';
  ctxGround.drawImage(nove, 0, 0, canvasGround.width, canvasGround.height);


  // 入力されたタイトルを描画する関数
  const drawFont = (el) => {
    ctxGround.font = '32px Noto Sans JP';
    ctxGround.fillStyle = '#000000';
    const x = (canvasGround.width - ctxGround.measureText(el).width) / 2
    const y = (canvasGround.height + 32 / 2) / 2 + 40
    ctxGround.fillText(el, x, y, 708);
  }


  // テキストが入力確定で出力
  const input = document.getElementById('input')
  input.addEventListener('change', () => {
    drawFont(input.value)
    clearCanvas()
    window.setTimeout(() => {
      drawFont(input.value)
    }, 500)
  })


  // テキストの削除
  deleteTitle.addEventListener('click', () => {
    clearCanvas()
    input.value = ''
  })


  const clearCanvas = () => {
    ctxGround.clearRect(0, 0, canvasGround.width, canvasGround.height);
    nove.src = '画像のパス';
    ctxGround.drawImage(nove, 0, 0, canvasGround.width, canvasGround.height);


  }
  // タイトルの文字量をチェック
  input.addEventListener('input', () => {
    if (input.value.length > 21) {
      alert('今はまだ、タイトルは20文字以内にしてください。')
    }
  })
</script>

基本的にコメントアウトを残したので、それ通りに作れば特に難しい点もないと思う。

投稿画面にリンクを張る

最後に作成したツールに飛ぶためのリンクを投稿画面に貼る。

add_action('admin_footer-post-new.php', 'add_custom_text');
add_action('admin_footer-post.php', 'add_custom_text');
function add_custom_text()
{
?>
  <script>
    const selectEyeCatch = document.getElementById('postimagediv')
    selectEyeCatch.insertAdjacentHTML('afterend', '<p class="creatEyeCatch"><a href="URL" target="_blank" rel="noopener noreferrer">nove のアイキャッチを生成する</a></p>');
  </script>
<?php
}

これですこしブログ更新を楽にできる。

わからない部分はコメントに残してもらえれば解説します。