この記事はちょっとマニアックといいますか用途がニッチな感じのWordPress覚書記事です。
カスタムフィールドをお手軽にカスタマイズできることで有名なAdvanced Custom Fields(以降ACF)。
今回は管理画面内の記事編集ページでACFの値を取得&判定し、独自のstyleを追加して管理画面をデザインするお話です。
目次
全体のコード
add_action("admin_head-post.php", "my_admin_head_post"); function my_admin_head_post(){ // ACFの取得したいフィールドを指定 $hogeFieldValue = get_field( 'ACFフィールド名', $post_id ); if ($hogeFieldValue) { /* ↓ここでstyleを指定する↓ */ echo '<style> #hogehoeeee { /* なんかいろいろ書く */ } </style>'.PHP_EOL; /* 確認用ログ */ echo '<script>'; echo 'console.log("取得してるよ!")'; echo '</script>'; } else { /* 確認用ログ */ echo '<script>'; echo 'console.log("値が入力されていないよ!")'; echo '</script>'; } };
これをfunctions.phpにコピペして、自分の好きなようにいじっちゃって下さい。
概要
ざっくりとコードの概要を説明させていただきますと、
WordPressのアクションフックを使って投稿画面が開かれたときに、指定したACFフィールドの値があった場合にstyleを適用させるものです。
通常は表示した投稿ページや固定ページで行うことを管理画面でやってしまおうという感じです。
特段難しいことはしていないのでコードのカスタマイズとか他のことにも応用が利きやすいんじゃないかなと思います。
解説
1行目
add_action("admin_head-post.php", "my_admin_head_post");
「add_action」でフックを指定します。今回は投稿画面を表示したときですので、admin_head-post.phpを指定しています。
ちなみにこのフックは管理画面内の様々なページに応用可能で、「admin_head-」の後ろに管理画面のURLにある「/wp-admin/ここの部分.php」の「ここの部分.php」を追加してあげれば指定したページに変更できます。
で、add_actionの第二引数で引っかかったフックの処理をする関数を指定しています。
5行目
$hogeFieldValue = get_field( 'ACFフィールド名', $post_id );
みなさん使い慣れているであろうget_field()を使って値を取得します。第一引数に取得&判定したいACFのフィールド名を入れ(ラベル名じゃないよ)、第二引数は投稿のIDを指定するために$post_idを入れます。
特に難しくないので次へ。
7〜13行目
if ($hogeFieldValue) { /* ↓ここでstyleを指定する↓ */ echo '<style> #hogehoeeee { /* なんかいろいろ書く */ } </style>'.PHP_EOL;
まずif文でACFフィールドの値が取得できたかを判定します。
値があればstyleを適用し、なければ何も起きません。
ちなみに「PHP_EOL」は改行を表し、自動で環境に合わせてくれる優れものです。(詳しくは「PHP: 定義済みの定数 – Manual PHP_EOL」)
15〜24行目
/* 確認用ログ */ echo '<script>'; echo 'console.log("取得してるよ!")'; echo '</script>'; } else { /* 確認用ログ */ echo '<script>'; echo 'console.log("値が入力されていないよ!")'; echo '</script>';
後は一応値が取得しているかしていないのかコンソールで確認できるようにつけておいたオマケみたいなものです。消してもらっても構いません。
関係ないですがPHPにもconsole.logみたいなものがあるといろいろと楽でいいんですがないんですかね?(var_dump()とかじゃなくて)
おまけ
実は今回覚え書きしたのは上記の仕組みとは違うことをやろうとしていて、本当は入力した値によってユーザーの権限ごとに違う挙動をさせる目的でした。
単純にget_field()の判定の後にユーザー権限の判定を続ければいいのですがそれも一応載せておきます。
add_action("admin_head-post.php", "my_admin_head_post"); function my_admin_head_post(){ // ACFの取得したいフィールドを指定 $hogeFieldValue = get_field( 'ACFフィールド名', $post_id ); if ($hogeFieldValue) { if(current_user_can('ユーザー権限名')){ /* ↓ここでstyleを指定する↓ */ echo '<style> #hogehoeeee { /* なんかいろいろ書く */ } </style>'.PHP_EOL; } /* 確認用ログ */ echo '<script>'; echo 'console.log("取得してるよ!")'; echo '</script>'; } else { /* 確認用ログ */ echo '<script>'; echo 'console.log("値が入力されていないよ!")'; echo '</script>'; } };
current_user_can()に判定したいユーザー名を入力すればオッケーです!
まとめ
アクションフックとかフィルターとかたくさんありすぎてよくわからないですが、覚書ついでにガンガン覚えていけたらなと思いましたまる。。