WordPress 投稿一覧画面に以下の項目を表示するカスタマイズ方法を紹介します。
- 最終更新日(ソート可)
- タイトル文字数
- 本文文字数
- 本文内の画像枚数
過去記事の見直しや整理に役立つので、ぜひ試してみてください。
目次
カスタマイズ前に必ずバックアップをとりましょう
WordPressのカスタマイズでfunctions.php
やカスタマイズ用プラグインにコードを追加する際、コードのミスに注意が必要です。コードを間違って入力すると、管理画面に入れなくなるなどの不具合が発生する可能性があります。そのため、必ず作業前にバックアップを取ることが重要です。
また、コードをWordなどの文章作成ソフトに貼り付けるのは避けてください。
これらのソフトは余計な書式を追加することがあり、それがエラーの原因になることがあります。代わりに、”テキストエディタ(Visual Studio Code、Sublime Textなど)”を使用するようにしましょう。
投稿一覧画面カスタマイズ方法
紹介するカスタマイズを行うと、投稿一覧画面は以下のようになります。
使用しているテーマやプラグインによっては、同じような項目を表示する機能があるので、必要なものだけ追加してください。
最終更新日を追加する(ソート可)
最終更新日を追加するコードは以下のとおり。新しい順・古い順で並び替えできます。
// Add last updated duration column to posts list
function reinx_add_last_updated_column($columns) {
$columns['last_updated'] = __('最終更新日');
return $columns;
}
add_filter('manage_post_posts_columns', 'reinx_add_last_updated_column');
// Populate last updated duration column with data
function reinx_populate_last_updated_column($column_name, $post_id) {
if ($column_name == 'last_updated') {
$post = get_post($post_id);
if ($post === null) {
echo "無効な投稿ID";
return;
}
$modified_timestamp = strtotime($post->post_modified);
if ($modified_timestamp === false) {
echo "投稿の更新日の解析に失敗しました";
return;
}
$current_timestamp = current_time('timestamp');
$time_difference = $current_timestamp - $modified_timestamp;
$years = floor($time_difference / (365 * 24 * 60 * 60));
$months = floor($time_difference / (30 * 24 * 60 * 60));
$days = floor($time_difference / (24 * 60 * 60));
if ($years > 0) {
$last_updated = $years . ' 年前';
} elseif ($months > 0) {
$last_updated = $months . ' ヶ月前';
} else {
$last_updated = $days . ' 日前';
}
echo $last_updated;
}
}
add_action('manage_posts_custom_column', 'reinx_populate_last_updated_column', 10, 2);
// Make the last updated duration column sortable
function reinx_make_last_updated_column_sortable($columns) {
$columns['last_updated'] = 'post_modified';
return $columns;
}
add_filter('manage_edit-post_sortable_columns', 'reinx_make_last_updated_column_sortable');
タイトル文字数・本文文字数
タイトル文字数と本文文字数を追加するコードは以下のとおり。文字数に HTML タグは含めていません。
// Add title and content length column to posts list
function reinx_add_length_column($columns) {
$columns['length'] = __('文字数');
return $columns;
}
add_filter('manage_post_posts_columns', 'reinx_add_length_column');
// Populate length column with data
function reinx_populate_length_column($column_name, $post_id) {
if ($column_name == 'length') {
$post = get_post($post_id);
if ($post === null) {
echo "無効な投稿ID";
return;
}
$title_length = mb_strlen($post->post_title);
$content_length = mb_strlen(strip_tags($post->post_content));
echo "タイトル: " . $title_length . " 文字<br>";
echo "本文: " . $content_length . " 文字";
}
}
add_action('manage_posts_custom_column', 'reinx_populate_length_column', 10, 2);
本文内の画像枚数
本文内の画像枚数を追加するコードは以下のとおり。<img>
をカウントしているため、インプレッションカウント用のアフィリエイトタグも含まれます。
// Add image count column to posts list
function reinx_add_image_count_column($columns) {
$columns['image_count'] = __('画像枚数');
return $columns;
}
add_filter('manage_post_posts_columns', 'reinx_add_image_count_column');
// Populate image count column with data
function reinx_populate_image_count_column($column_name, $post_id) {
if ($column_name == 'image_count') {
$post = get_post($post_id);
if ($post === null) {
echo "無効な投稿ID";
return;
}
$content = $post->post_content;
$image_count = substr_count($content, '<img');
echo $image_count . " 枚";
}
}
add_action('manage_posts_custom_column', 'reinx_populate_image_count_column', 10, 2);