【WordPress】カスタムフィールドで権限別に表示を切り替える

プラグインをカスタマイズしたくないお話

カスタムフィールドで有名なプラグインに「Advanced Custom Fields」があります。

Advanced Custom Fields (ACF)
Advanced Custom Fields (ACF) helps you easily customize WordPress with powerful, professional and intuitive fields. Proudly powering over 2 million we …

便利な機能がたくさんあるし使い方も直感的だし人気があると思います。

そんなACFをお使いの環境で出た要件。

Wysiwyg エディタのとある項目で下記のようにしたい。
・管理者は「タブ」ビジュアル&テキスト
・投稿者は「タブ」ビジュアルのみ

まぁ普通にできそうな気はしたのですが、繰り返しフィールド内なので少し面倒になりました。

スポンサーリンク

function.phpで対応

プラグインをカスタマイズするのは勘弁だったのでfunction.phpでどうにかしました。

まずはラッパーの属性にてclass名をつけてあげます。

例としてtarget_tab1にします。

んでjQueryで管理者以外は非表示にするコードを作成する。

キャッシュのせいでテキスト選択になってる場合があるのでクリックしてビジュアルにしておきます。

<script>
jQuery(function($){
  $(document).ready(function(){
    $(".target_tab1 .wp-editor-tabs .switch-tmce").click();
    $(".target_tab1 .wp-editor-tabs").hide();
  });
});
</script>

このコードを投稿画面に適用させるのだけど少し悩む。。。

admin_print_scriptsとかadmin_print_footer_scriptsとか試してもうまくいかない。。。

試行錯誤した結果、admin_noticesで成功しました。

不細工だけど下記で完成。

function admin_notices_tabs(){
     global $post;
     if (isset($post)){
         if ('hoge' === $post->post_type){
             if(!current_user_can('administrator')){
                 echo '<div class="error">';
                 echo '<script>';
                 echo 'jQuery(function($){';
                 echo '$(document).ready(function(){';
                 echo '$(".target_tab1 .wp-editor-tabs .switch-tmce").click();';
                 echo '$(".target_tab1 .wp-editor-tabs").hide();';
                 echo '});';
                 echo '});';
                 echo '</script>';
                 echo '</div>';
             }
         }
     }
 }
add_action( 'admin_notices', 'admin_notices_tabs' );

動けばいいんだよ動けば!

コメント

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