以前、『Bulk Change Media Author』というWordpressプラグインをご紹介しましたが、なぜか使えなくなってしまい、動作しなくなった原因をずっと調べていました。
何ヶ月もかかって原因を突き止めたので、今日はそのお話。
2020年08月29日時点で、以前のように問題なく使える状態に戻っています。
WPのバージョンの問題かと思ってたら全然違いました…お恥ずかしや。
Bulk Change Media Authorが使えなくなった
当サイトでご紹介した『Bulk Change Media Author』というプラグインは、Wordpressサイトのメディアライブラリの一覧画面から、ファイルの所有者(投稿者)を一括で変更してくれるものです。
このプラグインの紹介記事を書いた後、メディア一覧からの所有者一括変更ができなくなった時期がありました。
どのタイミングからだったかハッキリしないのですが、Wordpress5.3.2にアップデート済みの状態だったのは確かで、2020年02月07日時点では以前のような一括変更はできなくなってしまってたんですよね。
せっかくご紹介したけど、その記事を見つけてくださった方が実際は使えなくてガッカリしたらいけないと思い、紹介記事の最初のほうに以下のような注意喚起のメッセージを出してありました。

2020年08月29日時点ではプラグインが使えない問題は無事に解決しており、以前のように画像の所有者一括変更ができる状況に戻っています。
でも原因を突き止めるまでになかなか時間がかかったので、何が原因だったのかメモしておきますね。
使えなくなってた原因は2つ
2020年02月にプラグインが動作しなくなってから数ヶ月。
何が原因なのかいろいろ調べたり試したりしてきたのですが、複数の問題が重なっていました。そりゃ突き止めるのに時間かかるわけだよ…。
私の環境でBulk Change Media Authorが使えなくなっていた原因は2つ。
画像圧縮プラグイン『EWWW Image Optimizer(※以下EWWW IO)』を利用していたことと、”author=”を含むURLへのアクセスをサイトTOPへ転送していたことでした。
自分がWPのバージョンアップをしたタイミングとプラグインが使えなくなったタイミングが近かったのでWPのバージョンが原因かと思ってたけど、全然違いましたね…。
EWWW Image Optimizer
プラグイン紹介記事の注意メッセージでは詳しく書いていませんでしたが、そもそも、Bulk Change Media Authorが使えなくなったときに何が起きていたか。
一括操作でChange Authorを選択して実行しているにも関わらず、なぜかEWWW IO(画像圧縮プラグイン)の一括圧縮のページが開くんです。
ぜんぜん違うプラグインのページが開くこと自体、妙だと思ったのですが、私自身がなにかカスタムして設定したものではないので、なんでそのページにアクセスするよう処理されたのかも分からない…。
ということは、画像一括圧縮のページを開かせないように自分で編集できそうな箇所も分からないという状況でして、打つ手なしだったんです。
で、別件のトラブルで原因と解決策を探しているときに、EWWW IOを使っていると問題が起きるというケースにたどり着きました。
Bulk Change Media Authorの一括変更操作をするとEWWW IOのページに繋がることから、EWWW IOの設定や処理のほうがBulk Change Media Authorよりも優先して適用されてると推測。
別件のトラブル解決の都合もあったのでEWWW IOを無効化したところ、無事、今までのようにメディア所有者を一括変更できる状態に復活したという経緯でした。
“author=”を含むURLへのアクセスの自動転送
もう一つの原因は、URLに”author=”が含まれていた場合の自動転送処理。
WordPressで作られているサイトの場合、サイトのURL/?author=○○でアクセスするとユーザーのIDが含まれるURLに転送される仕組みがあるので、不正ログインを試みる目的で第三者がこのようなアクセスをしてくることがあります。
そこで、”author=○○”が含まれるURLへのアクセスがあったらサイトのTOPページなどへ自動転送されるように設定して、管理者以外の人がユーザーアカウントを調べられないようにしていました。
セキュリティ対策としてご自身のサイトで同じように設定している方が結構いらっしゃると思いますが、実はこれがBulk Change Media Authorの所有者変更の処理を妨害してしまってたようです。
それから、私が運営するサイトはどれも自分ひとりで記事を投稿してるので、そもそも投稿者アーカイブが作成されないように無効化してあったんです。
投稿者別の記事一覧=私の投稿記事一覧=サイトにあるすべての記事一覧、ということになるので、投稿者アーカイブなんて用意してても意味がないと思ってたんですよね。
“author=○○”を含むURLへのアクセス時の転送と投稿者アーカイブ無効化の合わせ技で設定していたのですが、これがBulk Change Media Authorの所有者変更の処理を妨害してしまってたようです。
先ほどお話したEWWW IOの使用中止の後、メディアの一覧画面からChange Authorを選んで実行すると、以前のようにBulk Change Media Authorの所有者一括変更のためのページにちゃんと飛んでくれるようになりました。
でも、実際に一括変更をしてもなぜかサイトのTOPページに繋がってしまって、画像の所有者は結局変更されなかったんですよね。何度試しても同じでした。
それで引き続き原因を探して突き止めたのが、セキュリティ対策のつもりでやっていた、”author=○○”のURLを自動転送する設定だったというわけです。
Bulk Change Media Authorを使ってメディアファイルの所有者変更を行う時って、選択した画像だけが一覧になっているページが開いて、そこから所有者を選択して実行すると一括変更が実行されるという流れになっています。
一覧ページから一括変更を実行した時に何故か毎回サイトTOPページになってしまうので、TOPページに飛ばされる直前のURLを調べてみた所、Bulk Change Media Authorは”author=”を含んだURLにアクセスしていました。
…そうです。
一括変更処理のための動作だったのに、外部からユーザーIDを調べようとする不正なアクセス試行とは別モノだって区別できていなかったので、それで自動転送されて毎回サイトTOPページに繋がっちゃってたというわけ。
セキュリティ対策のつもりだったのに、とんだ落とし穴でした。
解決策
EWWW Image Optimizerの利用を中止
Bulk Change Media Authorを再び使えるようにするための方法として、まずは、EWWW IOを使うのをやめることにしました。
別件のトラブル解決の都合だけで言えば、使うのをやめるところまでいかなくても、EWWW IOの処理をちょっとアレンジするだけで済んでたんです。
でも、そのアレンジは画像圧縮の処理にしか影響しないものだったので、Bulk Change Media Authorで一括処理を選ぶとEWWW IOのページに飛んでしまう、という現象は直らなかったんですよね。
EWWW IOの画像圧縮の性能には不満がなかったので名残惜しい気もしましたが、Bulk Change Media Authorの処理用のページにアクセスできないままになっちゃうので、致し方ありません…。
とはいえ、EWWW IOなしではサイトの容量が膨れ上がっていくので、画像圧縮については他のプラグインに乗り換える形で対処することにしました。
乗り換え先の画像圧縮プラグインについては以下の記事でお話しています。
自動転送の発動条件を「管理者以外の場合」に限定
もう一つの原因だった”author=○○”へのアクセスを防ぐ設定について。
今どきのWordpressサイトではその対策は必要ないという意見もチラホラ見かけるものの、いざ本当にやめようとなると、やっぱりなんとなく不安で踏み切れないんですよね。
でもそれを設定しているままだとBulk Change Media Authorの処理ができないし…
そこで、サイトTOPへの自動転送が特定の場合にだけ発動するように設定を修正して、メディアの所有者一括変更の処理で”author=○○”のURLにアクセスしても邪魔されないようにしました。
以前はURLに”author=○○”を含んでいた時点で有無を言わさずサイトTOPに転送する設定だったので、転送させる前にまず、アクセスしてきたユーザーが管理者権限を持っているかどうかをチェックします。
で、管理者権限のあるユーザー(つまり私)だった場合には何もしない、それ以外のアクセスだった場合だけサイトTOPに自動転送する、というように設定を変更しました。
自分のサイトのfunction.phpに書いていたコードを修正した結果、現在は以下のようなコードになっています。
※クリックで全文選択されます。
// author=○○でアクセスがあったらサイトTOPに転送する処理
//※管理者権限の有無で判定し、権限無しの場合のみ転送処理が発動
if (!current_user_can( 'list_users' ) ) {
function author_archive_redirect() {
if( preg_match('/author=([0-9]*)/i', $_SERVER['QUERY_STRING']) ){
wp_redirect( home_url() );
exit;
}
}
add_action('init', 'author_archive_redirect');
}
コードの先頭にある”if (!current_user_can( ‘list_users’ ) )”の部分が、『ユーザー一覧を表示する権限を持った人じゃない場合』という条件分岐の記述です。
ユーザー一覧を表示する権限って、Wordpressのユーザーロールの中では『管理者』にしか無いんですよね。編集者以下のユーザーにはこの権限がありません。
裏を返せば、ユーザー一覧を表示できるってことは管理者だということ。
なので、この権限が無い=管理者じゃない、つまり”author=○○”にアクセスする必要のない人だからサイトTOPに転送、という流れにしています。
ちなみに、今回の修正をする前から元々サイトに追加していたのは上記コードの4~10行目の部分だけだったのですが、これはWeb Design Leavesさんの以下の記事で紹介されているものを参考にさせていただいていました。
この設定による弊害
この対策を導入すると、一つ気をつけないといけないことが出てきます。
サイトTOPへの自動転送は管理者以外のユーザーの場合に発動するので、管理者じゃないユーザーがBulk Change Media Authorでメディアファイルの一括変更をしようとしても、私がずっと困っていたのと同じように自動転送されてしまうということ。
自分一人で管理・運営していて他のユーザー登録もないWordpressサイトの場合には特に困らないとは思います。
でも複数のユーザーがいて管理者と編集者や寄稿者などに分かれている場合などは、管理者ユーザーじゃないとBulk Change Media Authorを使えないという状況になるので、その点だけ忘れないようにしていただきたいです。
編集者以下の権限のユーザーでもBulk Change Media Authorを使えるようにしておきたいのであれば、”author=○○”でアクセスがあったときの自動転送の条件設定を、ユーザー一覧の表示権限以外の別の内容に変更する必要があります。
まとめ
てっきりWPのバージョンアップをしたせいで使えなくなってしまったかと思っていたのが、思わぬ要因(しかも2つ)が重なって動作を妨害してる状態になっていたという、今回の件。
プラグインって便利だけど、いろいろ使うと、こういうことも起きるんですね…。
今回のケースはかなりレアな状況かとは思いますが、もしBulk Change Media Authorが使えなくて困ってる方がいたら、この記事でご紹介した対処法をぜひお試しになってみてください。