WordPressで複数のユーザーが更新していくようなサイトを作っている場合、最終更新者を表示したいですよね?
そんな時標準の関数で用意されているのが「the modified author」という関数。
使い方としては公式コーデックスで掲載されているように
<p>この投稿は <?php the_modified_author(); ?> が最後に編集しました。</p>
とテンプレートの中などに書くことで表示されるのですが、この関数は「どの記事の?」という指定ができないため、通常の投稿テンプレートなどでは使えるのですが、それ以外ではきちんと最終更新者を拾ってきてくれません(これをループ内・ループ外というのですが今回の記事では詳しく紹介しません)。
これをループ外・ループ内関係なく表示できる方法はないかといろいろ検索したところ英語のページで掲載されていました。
実際に行ったところうまく機能しましたので備忘録を兼ね紹介しておきます。
ループ内・ループ外に関わらず最終更新者を表示する方法
テーマのfunctions.phpへ以下を追記します
if (!function_exists('get_the_modified_author')) {
function get_the_modified_author() {
global $post;
if ( $last_id = get_post_meta($post->ID, '_edit_last', true) ) {
$last_user = get_userdata($last_id);
return apply_filters('the_modified_author', $last_user->display_name);
}
}
}
if (!function_exists('the_modified_author')) {
function the_modified_author() {
echo get_the_modified_author();
}
}
簡単にコード解説すると、「<?php the_modified_author(); ?>」を使って最終更新者を表示する場合には、まず「’the_modified_author’」で投稿IDに対する最終更新者ID(_edit_last)を取得し、その上で最終更新者の表示名を出力しなさいという内容になっています。
前述した「どの投稿の?」をこの関数を使ってはっきりさせてから投稿者名の表示をしなさいというコードなんですね。
あとは通常通り
<p>この投稿は <?php the_modified_author(); ?> が最後に編集しました。</p>
と書けば「この投稿は〇〇が最後に編集しました」と表示されるようになります。
※if (!function_exists..と書かれていますので、既にfunctions.phpに同じ関数に対する定義がある場合には機能しません
一からコードを書こうと思うと大変ですけど、こうした参考記事が特に海外のサイトではよく掲載されていて非常に助かります。
WordPressには隠しフィールドとして「_edit_last」という最終更新者IDというキーがあるんですね。初めて知りました。また一つ賢くなりました(笑)。
<?php the_modified_author(); ?>
を使っても最終編集者名が表示できないケースに直面したら試してみてはいかがでしょうか??ちなみにテストサイトではきちんと機能しましたよ。