Smart Custom Fieldsプラグインのフィールド編集画面で表示条件の入力候補にカスタム投稿タイプの投稿IDを表示させる方法をご紹介します。
お気に入りのプラグインのひとつである「Smart Custom Fields」。
ちなみにこのプラグインの作者はこれまたお気に入りの「MW WP Form」の作者でもある。
「Advanced Custom Field」 では有料の繰り返し機能が標準装備しているので、リピートしたい入力フィールドを作るときにとても重宝しているのですが、、、
フィールドの表示条件には投稿と固定ページの投稿IDしか出てこない
このプラグインを長く使ってきたが、いつのバージョンからかフィールド編集画面の表示条件に入力候補が出力されるようになった。
投稿IDを事前に確認しておかなくても、自動で入力候補が出てきてくれるので、とてもありがたい機能だ。
でも、この入力候補には投稿と固定ページの投稿IDしか出てこない。その上、入力候補以外の投稿IDは指定できない(入力はできるが保存できない)。
おそらく、これはバグではなく作者が意図的にそうしているのだろうと推測しているが、この機能が付く前は、カスタム投稿タイプの投稿IDも保存できていたので、また保存できるようにしてくれないかなぁと思っている。
本題:カスタム投稿タイプの投稿IDを表示させる方法
やっと本題です。
プラグインのコード修正が必要です。
バックアップなどは自己判断でお願いします。
wp-content/plugins/smart-custom-fields/classes/class.rest-api.php
の37行目のget_all_postsという関数のコードを以下のコードに書き換える。
ちなみに、このときのプラグインのバージョンは4.1.2です。
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 | public function get_all_posts() { // カスタム投稿タイプも含める $args = array( 'public' => true, '_builtin' => false ); $custom_post_types = get_post_types( $args, 'names', 'and' ); $post_types = array_merge($custom_post_types, array( 'post', 'page' )); $all_posts = get_posts( array( // 'post_type' => array( 'post', 'page' ), 'post_type' => $post_types, 'post_status' => 'publish', 'orderby' => 'date', 'order' => 'ASC', 'posts_per_page' => -1, // all posts ) ); if ( $all_posts ) { $source = array(); foreach ( $all_posts as $k => $post ) { $source[ $k ]['id'] = $post->ID; $source[ $k ]['text'] = $post->ID . ' - ' . $post->post_title; } } return $source; } |
3~9、14行目が追加コードです。
カスタム投稿タイプのスラッグを取得して、投稿と固定ページのスラッグとマージしてget_posts関数に渡しています。
カスタム投稿タイプを取得する方法はこちらを参考にしました。
プラグインの更新でコードが上書きされてしまったらどうなるか
もしプラグインの更新などで上記のコードが上書きされてしまっても、一度保存できた投稿IDはデータベースに残っているので、投稿IDが消えてしまうことはない。
なので、不具合の心配はないと思う。
ちなみに、どうしてもプラグインの更新を非通知にしたければ以下を参考にしてください。