【WordPress】【Advanced Custom fields】自動でACFに入力された値をタイトルで使う
カスタムフィールドを作成するプラグイン「Advanced Custom Fields」を使っていると、タイトルを入力する必要がないWEBサイトの運用を考える場合があります。
フロントエンドからの場合は、アンケートフォームの設置が考えられます。
管理画面で入力する場合でも、例えば店舗情報を入力するとか、データのように投稿を扱う場合があります。
確かにタイトルなしでも投稿はできますが、管理画面の投稿一覧に「(タイトルなし)」が並んでしまい、管理する時に分かりにくくなってしまいます。
そのような投稿の場合、ある意味タイトルで内容だけ判別できれば良いので、「Advanced Custom Fields」で作成したカスタムフィールドの値をタイトルに転用できれば十分かもしれません。
それもfunctions.phpを編集することで可能です。
カスタムフィールドからタイトルにするフィールドを決める
まずは、タイトルにするカスタムフィールドを決めましょう。
SEOの事を考えるとかではなく、一覧画面で内容が分かりやすくするのが目的なので、分かりやすいものを選べば良いです。
今回は用意したこちらのフィールドグループを使います。
分かりやすく、「日付」・「店舗名」・「責任者名」のフィールドを使います。
【日付】店舗名(責任者名)
のようなタイトルにしていこうかと思います。
functions.phpを編集する
形がきまれば、後はコードを書いて行きます。
先にコードを紹介してしまいます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <!--?php //カスタムフィールドの値をタイトルに入れる //アクションフック add_action( 'acf/save_post', 'test_auto_title', 19 ); //オリジナル関数の定義 function test_auto_title( $post_id ){ //投稿タイプを取得して判別 $post_type = get_post_type( $post_id ); if( $post_type === 'test' ){ //使用するカスタムフィールドの値を変数に入れる $test_date = get_field( 'test-date', $post_id ); $test_tenpo = get_field( 'test-tenpo', $post_id ); $test_tencho = get_field( 'test-tencho', $post_id ); //タイトルを作って変数に入れる $post_title = '【' . $test_date . '】' . $test_tenpo . '(' . $test_tencho . ')'; //サニタイズ処理 $post_name = sanitize_title( $post_title ); //作成した変数を投稿の設定に入れる $post = array( 'ID' =--> $post_id, 'post_name' => $post_name, 'post_title' => $post_title ); //更新時にタイトルを更新する wp_update_post( $post ); } } ?> |
動作としては、カスタム投稿の保存時に自動でタイトルにカスタムフィールドに入力されている値が挿入されるものとなっています。
それぞれがどのような動きをしているか、簡単に書いておきます。
Advanced Custom Fieldsのアクションフックを使用して投稿を更新する
1 2 3 4 5 6 7 | <?php //カスタムフィールドの値をタイトルに入れる //アクションフック add_action( 'acf/save_post', 'test_auto_title', 19 ); //オリジナル関数の定義 function test_auto_title( $post_id ){ ?> |
「Advanced Custom Fields」で用意されている、「acf/save_post」というアクションフックを利用し「wp_update_post()」で投稿の内容を更新します。
更新する投稿の内容でタイトルを設定していきます。
なので、今回は「test_auto_title」という独自関数を定義することにしました。
特定の投稿タイプのみで動作するように
まずは、通常の投稿(post)や固定ページ(page)といった他の投稿の更新時には動作しないように、動作する投稿タイプを指定します。
1 2 3 4 | <?php $post_type = get_post_type( $post_id ); if( $post_type === 'test' ){ ?> |
今回の投稿タイプ「test」の時に動作するようにif文を書きます。
タイトルを整える
ここから本題のタイトルの設定をしていきます。
分かりやすく、カスタムフィールドの値を変数に格納し、扱いやすくしておきます。
使用する値は保存する投稿に入力したものなので、IDを「$post_id」で指定しておきます。
1 2 3 4 5 6 | <?php //使用するカスタムフィールドの値を変数に入れる $test_date = get_field( 'test-date', $post_id ); $test_tenpo = get_field( 'test-tenpo', $post_id ); $test_tencho = get_field( 'test-tencho', $post_id ); ?> |
いちいち変数に入れるのが面倒であれば、この後のタイトルを作る部分で直接「get_field()」の内容を書いても大丈夫です。
ではタイトルを作っていきます。先ほど書いた通り、「【日付】店舗名(責任者名)」というものにしたいので、結合演算子でつなぎます。
1 2 3 4 5 6 | <?php //タイトルを作って変数に入れる $post_title = '【' . $test_date . '】' . $test_tenpo . '(' . $test_tencho . ')'; //サニタイズ処理 $post_name = sanitize_title( $post_title ); ?> |
一応、他の人が入力することも考えてサニタイズ処理もしておきます。
あとは、「wp_update_post()」の配列を設定すればOKです。
1 2 3 4 5 6 7 8 | <?php //作成した変数を投稿の設定に入れる $post = array( 'ID' => $post_id, 'post_name' => $post_name, 'post_title' => $post_title ); ?> |
functions.phpを保存し、FTPソフト等でアップロード後、こんな感じで勝手にタイトルが入るようになります。
ワードプレスの使いかたが拡がるもの
以上が、カスタムフィールドの値を使用してタイトルを自動設定する方法となります。
「Advanced Custom Fields」やカスタム投稿という機能の使い方によって、ワードプレスの新しい使い方を考えさせてくれる方法です。
自分がこの方法の必要性を感じた理由が、特にタイトルは必要ないけど、内容を見分けるための目印が欲しいという事があったからです。
なので、どちらかと言うとWEBサイトの運営的なものよりも、ワードプレスを何かの管理システムとして使う場合に便利な方法と言えます。
ワードプレス関係の他の記事はこちらからどうぞ!株式会社東建工業-インターネット事業部-
イラスト制作例
当社はオリジナルイラストの制作を行っております。
制作例を一部掲載していますので、是非ご覧ください!
当社のデザイン作成について
当社はWEB制作に加え、デザイン作成と制作も行っております。
・チラシ、パンフレット等の紙媒体に使用するデザインと制作
・オリジナルデザインでのクリアホルダーの制作
・オリジナルデザインでのステッカー、シールの制作
・オリジナルデザインでのプリントTシャツの制作
などなど・・・
様々なデザインに関する制作をご依頼頂けます。
詳しくは当社のデザイン作成についてのブログ記事をご覧ください。
前の記事
【WordPress】Advanced Custom Fieldsで作成したカスタムフィールドの値を表示する
次の記事
【WordPress】【Advanced Custom fields】カスタム投稿のタイトルの入力を制御する。
こちらも読まれています
お問い合せ
この記事の内容や当社についてのお問い合わせはこちらのフォームをご覧下さい。
ご利用前に当社のプライバシーポリシーと免責事項をお読み下さい。
送信ボタンを押された時点で、当社プライバシーポリシー又は、免責事項にご同意頂いたものとみなします。