カスタム投稿タイプのクイック編集が無効にならない時に確認してみること【ワードプレス】
ワードプレスの投稿一覧や固定ページ一覧にあるクイック編集機能。いちいち編集画面を開かずに済み便利なものです。ですがクライアント向けに作りこんでいった結果、不要になったり無い方が都合が良いケースが出る事もあります。
今回「特定のユーザーのタイプ(権限)」かつ「特定のカスタム投稿タイプ」でクイック編集機能を無効にしたいケースがありました。
しかし。。。いくらやってもカスタム投稿タイプだけクイック編集が無効にならない!
軽くハマってしまったので記事にしておこうと思います。
~ 目次 ~
post_row_actions / page_row_actionsフックを使用する
クイック編集ボタンだけでなく、まわりの「編集」や「ゴミ箱」ボタンなども含めてカスタマイズできるフィルターフックが用意されています。
基本的に「投稿」の場合はpost_row_actionsフック。「固定ページ」の場合はpage_row_actionsフックを使用します。
投稿の場合は以下のコードでクイック編集が無効になります。
1 2 3 4 5 6 |
/* 「投稿」のクイック編集を無効にする */ function remove_quick_edit( $actions ) { unset($actions['inline hide-if-no-js']); return $actions; } add_filter('post_row_actions','remove_quick_edit',10,1); |
固定ページの場合はpage_row_actionsを使用しますので、最終行のフックの部分だけ差し替えて以下のコードでOKです。
1 2 3 4 5 6 |
/* 「固定ページ」のクイック編集を無効にする */ function remove_quick_edit( $actions ) { unset($actions['inline hide-if-no-js']); return $actions; } add_filter('page_row_actions','remove_quick_edit',10,1); |
と、以上が基本的な部分ですが、今回は「カスタム投稿タイプに対して効かない!」という状況でした。
カスタム投稿タイプの場合
私が少々ハマった原因は、カスタム投稿タイプの場合post_row_actionsを通らないケースがある事です。「カスタム投稿タイプなんだからpostだろ!」って決め込んでいました。。
カスタム投稿タイプの場合は、登録する時に階層を持たせている場合のみ、page_row_actionsを通るようです。
つまりregister_post_typeでカスタム投稿タイプを登録する時に、パラメータのhierarchicalをtrueにしている場合だけ、page_row_actionsを使用しないと効いてくれません。それ以外の場合は、post_row_actionsフックでOKです。
今回、私がやりたかった「管理者以外のユーザーの特定投稿タイプのクイック編集を無効にする」という場合のサンプルコードを載せておきます。
1 2 3 4 5 6 7 8 |
/* 管理者以外の場合、カスタム投稿タイプ「news」のクイック編集を無効にする */ function remove_quick_edit( $actions , $post ) { if( !current_user_can('administrator') && $post->post_type == 'news' ){ unset($actions['inline hide-if-no-js']); } return $actions; } add_filter('post_row_actions','remove_quick_edit',10,2); |
3行目の終わりの方の「news」という部分を、クイック編集を無効にしたいカスタム投稿タイプ名に変えれば、そのまま使用できます。
「管理者以外」という条件を変えたい場合は同じく3行目のcurrent_user_canのカッコ内を書き換えます。ユーザー権限の種類などは割愛しますので、CODEXなどでご確認ください。
先程も書きましたが、投稿タイプのhierarchicalがtrueの場合は、最終行のpost_row_actionsをpage_row_actionsに書き換えましょう。
最後に
カスタム投稿タイプに対して…と考えると、post_row_actionsフックを使用したくなります。
ですが、カスタム投稿タイプに階層を持たせている場合は、page_row_actionsフックになるんですね。私の頭の中はpost_row_actionsフック1本に絞られてしまったので、この辺で少々ハマってしまいました。
という事で、カスタム投稿タイプのクイック編集が上手く無効にできない!という時は、投稿タイプのhierarchicalを確認してみましょう。ACFなどのプラグインでも、たいがいhierarchicalの設定はありますので、プラグインで登録している場合は設定画面で確認できます。
register_post_typeで、hierarchicalをtrueにしてある場合はpage_row_actionsフックを使用すればOKです。