2016-05-09 9 views
0

ACFの「フレキシブルコンテンツ」を使用して、「セクション」(基本的にCSSクラス名とIDを持つ単なるラッピング要素)を作成できるかなり高度な「ページビルダー」を作成しました)し、私のすべての柔軟なコンテンツ(画像、wysiwygなど)を追加します。非管理者からの特定の高度なカスタムフィールドを非表示にする

私がしたいのは、非管理者用のフィールドを非表示にすることです。私は、古いエディタがセクションのIDやクラス名を変更することはできません。

私はACF管理者のある特定のタイプのユーザーロールに対して特定のフィールドグループを表示することを選択できる「ルール」パネルについて認識していますが、同じことが個々のフィールド。

adminインターフェイスからは実行できないようですが、私のfunctions.phpファイルからどのように実行できるのか分かっていますか?おそらく、現在のユーザーの役割に基づいて特定のフィールドにフックしたり無効にしたりできるフィルタやアクションはありますか?

私は隠さたいものを示す2つのスクリーンショット添付しました

私は、「行を追加」メニューから、これらの選択肢を隠したいのですが:

enter image description here

そして私を」これらのパネルのようなdが非管理者に見えないようにする:

enter image description here

編集:私たちはそれに取り組んでいる一方で、私は気にしないだろうHI繰り返し可能なフィールドから個々のフィールドを切り出します。最初のスクリーンショットの「修飾子」フィールドに気付くでしょう。非管理者から非表示にしてもいいでしょう。私は両方の問題でほぼ同じ解決策になると思いますか?

答えて

0

実際には管理していませんフィールドを非表示にしていますが、にはが無効になっています。残念ながら、acf/load_fieldアクションでそれらを無効にするだけでは、ドロップダウンメニューから削除するだけでは不十分でしたので、管理ページにCSSを追加して、少なくとも非表示にしました。これは、サイトの編集者が正確にそれを壊すために最善を尽くすわけではないので、見て分かります。

<?php 
/** 
* Hide some "ACF Section" related custom fields 
*/ 
add_action('acf/load_field', 'sleek_hide_acf_section_fields', 10, 1); 

function sleek_hide_acf_section_fields ($field) { 
    $hide = array('section_name', 'section_modifiers', 'modifiers'); 

    global $current_user; 

    if ((isset($field['_name']) and in_array($field['_name'], $hide)) and (is_admin() && is_user_logged_in() && !in_array('administrator', $current_user->roles))) { 
     $field['disabled'] = true; 
    } 

    return $field; 
} 

add_action('admin_head', 'sleek_hide_acf_section_fields_css'); 

function sleek_hide_acf_section_fields_css() { 
    $hide = array('section_name', 'section_modifiers', 'modifiers'); 

    global $current_user; 

    if (is_admin() && is_user_logged_in() && !in_array('administrator', $current_user->roles)) { 
     echo '<style>'; 

     foreach ($hide as $h) { 
      echo 'div.acf-fc-popup a[data-layout="' . $h . '"]{display: none}'; 
     } 

     echo '</style>'; 
    } 
} 
関連する問題