WordPress にシェルスクリプトで画像をアップ

WordPress はめちゃめちゃ使いやすくて好きなんだけど、なんか画像の差しこみが面倒に感じる。
 これをちょっとでも楽にしようと思って、スクリプトを書いた。

WordPress における画像の保存場所

ftp ソフトでレンタルサーバに接続し、ワードプレスにおける画像の保存場所を捜してみる。
 これ、ひとによって違うのかもしれないけど、わたしの場合は以下のアドレスのようだ。

ドメイン/public_html/wp-contetns/uploads/2019/09/

ドメインはサイトURL から http とかを取り除いたやつだ。例えばこのサイトならmac-ra.comということになる。最後のほうの/2019/09/というのは画像をアップロードした年と月みたいだ。
 ここに curl で画像をアップしてやりゃあいいことになる。

シェルスクリプト

📝 upimg.sh

#!/bin/bash

thisyear=`date "+%Y"`
thismonth=`date "+%m"`

USER='ユーザーネーム'
PASSWORD='パスワード'
HOSTNAME='ホストネーム'
UPLOAD_PATH=`echo 'ドメイン/public_html/wp-content/uploads/'"$thisyear"'/'"$thismonth"'/'`

for img in "$@"
do
    FILENAME="$img"
    curl -T "${FILENAME}" -u "${USER}":"${PASSWORD}" --ftp-create-dirs -ssl ftp://"${HOSTNAME}"/"${UPLOAD_PATH}"
    BASENAME=`basename "$img"`
    URL=`echo -n '![](サイトURL/wp-content/uploads/'"$thisyear"'/'"$thismonth"'/'"$BASENAME"')'`
    echo "$URL" | pbcopy
    echo "$URL"
done

ユーザーネーム、パスワード、ホストネーム、サイトURL はレンタルサーバを借りたとき、サーバの会社がくれるメールに書いてあるやつだ。使用する場合は適宜、書き換える必要がある。
 また上述したようにUPLOAD_PATHも、それぞれの環境にあわせて書き直す。

あと、レンタルサーバによっては curl お断りみたいなところもあるのかもしれない。

使い方など

スクリプトの使い方は、sh upimg.sh 画像ファイルでリターン。
 curl がただちに画像をアップロードしてくれる。
 かつ、その画像のアドレスをマークダウンで返すことにした。

なんでマークダウンかというと、WordPress はバージョン 5 から、デフォルトでマークダウンを html にしてくれるようになったからである。だったら別に html タグで返してもいいんだけど、まぁ、ふだんからマークダウンで記事を書いているので、こうした。

curl のオプション--ftp-create-dirsをつけると、該当のフォルダがない場合は自動で作ってくれる。オプション-ssl で ssl 接続になる。
 pbcopy というコマンドは Mac 特有のもので、クリップボードになにかをコピーする、というものだ。
 つまりマークダウンでブログの記事を書きながら、画像を挟む箇所にきたらおもむろに画像をアップして、コピーされた画像 URL をばすっとペーストするようにしたわけだ。
(画像ファイルを複数枚、一度にアップロードした場合は、最後の画像のアドレスだけがクリップボードに残る)

これで多少、記事投稿が楽になった。
 しかしこのスクリプトにはひとつ、欠点がある。このスクリプトでアップした画像は、WordPress のダッシュボードの、メディア・ライブラリに表示されないのだ。
 この点だけは注意。