省エネ運転中

【WordPress】ACFの値を使ってタイトルとスラッグを自動設定する(Advanced Custom Fields)

WordPressカスタマイズ

WordPressで定型的なコンテンツを運用する際、タイトルやスラッグは手入力ではなく、既存のデータなどを反映させたい場合などがあるかと思います。

ここでは、Advanced Custom Fieldsに入力された値を使ってWordPress投稿のタイトルとスラッグを自動設定する方法について説明します。

ACFの値をページタイトル、スラッグに自動反映させる

Advanced Custom Fieldsの値を取得して投稿内に反映させるには、acf/save_post アクションにフックします。

下記の例ではカスタム投稿タイプ「product」に対して、「prod-number」、「prod-name」のカスタムフィールドが準備されていると想定した場合の処理です。

投稿の保存時に「prod-name」をページタイトルに、「prod-number」をスラッグに設定します。

以下をfunctions.phpなどに記載します。

function lh_acf_save_post($post_id) {
    if (get_post_type($post_id) == 'product') { //投稿タイプを確認
        if ( get_post_type( $post_id ) == 'acf' ) { //投稿タイプ'ACF'のときは実行しない
            return;
        }
        $new_title = '';
        $new_slug = '';
        $empty_text = 'unnamed'; //データがなかった場合の文字列

        // 各ACFの文字列取得
        $new_slug = get_field('prod-number', $post_id ) ? get_field('prod-number', $post_id ) : $empty_text;
        $new_title = get_field('prod-name', $post_id ) ? get_field('prod-name', $post_id ) : $empty_text;

        remove_action( 'acf/save_post', 'lh_acf_save_post' ); // ループ抑制のため既存のアクション削除

        // 投稿データを更新
        $post = array(
            'ID' => $post_id,
            'post_title' => $new_title,
            'post_name' => $new_slug,
        );
        wp_update_post($post);

        add_action('acf/save_post', 'lh_save_post'); // 保存

        // 新規投稿(保存)の場合のURL取得
        $_POST['return'] = add_query_arg('updated', 'true', get_permalink($post_id));
    }
}
add_action( 'acf/save_post', 'lh_acf_save_post', 10, 1 );

コメント

タイトルとURLをコピーしました