【WordPress】カスタムフィールドの値を使ってタイトルを自動で生成する

WordPressを管理ツールとして利用する場合。

投稿を作成する時に面倒・・・というか問題になるのが投稿のタイトルだったりします。

ラベルのような役割になるわけですが、基本は手入力となるわけです。

入力ルールを決めれば良いですが・・・人間なので、ちょっとした間違いが起こる可能性があります。

それを防ぐために、カスタムフィールドの値を使って自動化してみます。

タイトルの自動化に踏み切った経緯

例えば、「日付・商品名・コード」という並びで機械的にタイトルを入力することにしたとましょう。

もしかしたら、並びを間違えてしまうかもしれません。「商品名・日付・コード」とか。

または区切りで使っている「・」が半角だったり全角だったり。

日付も「2023/11/4」とする人もいれば、「2023年11月4日」と和暦で入力してしまう人もいるかもしれません。

複数人で使用する場合、このような間違いが起こる可能性があります。

自分個人で入力したとしても同じ間違いが起こる可能性があります。

同じデータなのに、違うタイトルとして登録されてしまうと、そのデータを使う時にどちらが正しいデータか検証しなければいけなくなります。

であれば、入力する項目、または選択する項目から自動でタイトルが生成されるようにすることで、ヒューマンエラーを防げるのではないか。

ということです。

管理目的の場合、データ入力の簡易化でカスタムフィールドを使う事が多いので。

そのカスタムフィールドの値を使って、タイトルが自動で入力されるようにします

投稿保存時の動作にフックする

今回もカスタムフィールドの作成に「Advanced Custom Fields」を利用したので、値の呼び出しやフックはプラグインで用意されたものを使っています。

下記のコードを、functions.phpに入力します。

//自動タイトル設定
function auto_title( $post_id ){
    //投稿タイプ判定
    $post_type = get_post_type( $post_id );
    if( $post_type == 'test-post' ){
        //使用する情報の取得
        $date = get_field( 'test-date', $post_id );
        $sub_title = get_field( 'test-text', $post_id );
        //タイトル情報の作成
        $post_title =  "【" . $date . "】" . $sub_title;
        $post_name = sanitize_title( $post_title );
        //投稿情報の設定
        $post = array(
            'ID' => $post_id,
            'post_name' => $post_name,
            'post_title' => $post_title
        );
        //投稿情報の上書き
        wp_update_post ( $post );
    }
}
add_action( 'acf/save_post', 'auto_title' );

使用するフックは、投稿の保存時に動作するacf/save_postです。ACFを使っていない場合は、save_postを利用すれば良いでしょう。

まずは、投稿タイプの判定を行い自動でタイトルを付けたいカスタム投稿タイプかを判定します。

全部の投稿タイプで動作させる必要はないので、カスタム投稿タイプを用意して動作を限定した方が良いでしょう。

次に、タイトルに使用したいカスタムフィールドの値を呼び出して$dateに日付、$sub_titleにテキストフィールドに入力された文字列を入れています。

そしてこの2つの変数を$post_titleで連結させ、「【日付】サブタイトル」という表示に調整します。

念のためサニタイズ処理をした後に、投稿情報の配列に情報をいれ、wp_update_post()で値を保存します。

これでカスタムフィールドの値を利用して、タイトルを自動生成することができます。

入力量を減らす一つの方法

タイトルを自動生成することで、一貫性をもたせることができ。

投稿データの管理も楽になりますし、他の投稿で使用するときにも見分けやすくなります。

データとして積み上げる投稿を扱う事が多いので、意外と良く使ってますかね。