カスタムフィールドを含む投稿の場合、わざわざタイトルを設定する必要がないものもあります。
そういったときに、カスタムフィールド値を使ってタイトルを自動生成してくれると楽ですし、一覧で見てもわかりやすい状態にすることができます。
今回はWordPressで「投稿タイトルを自動生成する方法」についてサンプルコードを用いてご紹介します。
タイトルを自動生成
今回は制作会社が自社HPに過去の制作物を投稿するといった仕組みを想定して、カスタムフィールド値を利用して【制作年月 + 会社名 + 作品タイプ】というタイトルを自動生成します。
カスタムフィールド値を組み合わせる
以下サンプルコードです。functions.phpに記述してください。
//タイトルの自動生成(制作年月 + 会社名 + 作品タイプ)
function rename_post_title($post_id){
global $post;
if($post->post_type == 'post'){ #投稿タイプの確認
//タイトルになる文字列を生成
$title = get_post_meta($post_id, 'date', true).'作成 「'.get_post_meta($post_id, 'company', true).'」'.get_post_meta($post_id, 'type', true);
//もし現在のタイトルと異なる場合のみ、タイトルを更新(ループ回避)
if(get_the_title($post_id) !== $title){
wp_update_post(['ID' => $post_id, 'post_title' => $title]); #生成したタイトルに書き換え
}
}
}
add_action('save_post', 'rename_post_title', 10);
※今回は制作年月をdate、会社名をcompany、作品タイプをtypeで想定しています
save_postにアクションフックさせ、投稿情報の保存時にタイトルを生成してセットするようにしています。
それでは順番に見ていきましょう。
if($post->post_type == 'post')
ここで投稿タイプを判別しています。もしカスタム投稿タイプを使用している場合は、タイトルを自動生成したい投稿タイプを指定してください。
//タイトルになる文字列を生成
$title = get_post_meta($post_id, 'date', true).'作成 「'.get_post_meta($post_id, 'company', true).'」'.get_post_meta($post_id, 'type', true);
ここでカスタムフィールドの値を並べてタイトルを生成します。今回はわかりやすく、制作年月の後に「作成」を追加して、会社名をカッコで囲みました。
//もし現在のタイトルと異なる場合のみ、タイトルを更新(ループ回避)
if(get_the_title($post_id) !== $title){
wp_update_post(['ID' => $post_id, 'post_title' => $title]); #生成したタイトルに書き換え
}
こちらがタイトル書き換えの重要ポイントです。
wp_update_postを使用してタイトルを書き換えているのですが、この1文だけだと更新をする際にサイトこのアクションフックが発動してしまい無限ループに陥ります。
そのため、if文を使って現在のタイトルが今回生成したタイトルと異なっている場合のみ更新するようにしています。
これでタイトルを自動生成することができます。
プラグイン「ACF」を使用している場合
もしカスタムフィールドを設定するためにプラグイン「Advanced Custom Fields」を使っている人は、以下のサンプルコードを使ってください。
//タイトルの自動生成(制作年月 + 会社名 + 作品タイプ)
function rename_post_title($post_id){
global $post;
if($post->post_type == 'post'){ #投稿タイプの確認
//タイトルになる文字列を生成
$title = get_post_meta($post_id, 'date', true).'作成 「'.get_post_meta($post_id, 'company', true).'」'.get_post_meta($post_id, 'type', true);
//もし現在のタイトルと異なる場合のみ、タイトルを更新(ループ回避)
if(get_the_title($post_id) !== $title){
wp_update_post(['ID' => $post_id, 'post_title' => $title]); #生成したタイトルに書き換え
}
}
}
add_action('save_post', 'rename_post_title', 10);
ACFで準備されている関数、get_fieldでカスタムフィールド値が取得できるので、より簡潔に記述することができます。
カスタムフィールドの数が多い場合は、プラグインを使うと簡単に追加ができて作業効率もあがりますのでオススメします。
Advanced Custom Fields
プレースホルダーを変更
タイトルをもし入力されても上書きされてしまうため、入力させる必要がありません。なので今回は、プレースホルダーを設定して伝える方法をご紹介します。
以下サンプルコードです。
//タイトルのプレースホルダ―書き換え
function change_post_title($title){
$screen = get_current_screen();
if ($screen->post_type == 'post') {
$title = '【タイトル入力不要】「制作年月+会社名+作品タイプ」を自動生成';
}
return $title;
}
add_filter('enter_title_here', 'change_post_title');
これでタイトルへの入力は不要だと伝えることができます。
他にも、タイトル欄を消してしまったり、そもそも入力自体ができないようにすることも可能なので、環境にあった方法を選択すると良いでしょう。
まとめ
いかがだったでしょうか。
今回は「投稿タイトルを自動生成する方法」をご紹介しました。
カスタムフィールドを設定していて、わざわざタイトルをつけるする必要が無いような投稿をする際には役立ちますので、ぜひ参考にしてくださいね。