隐藏非管理员的某些高级自定义字段

时间:2016-05-09 08:55:06

标签: php wordpress advanced-custom-fields

我使用ACF的“灵活内容”来创建一个相当高级的“页面构建器”,作者可以创建一个“部分”(基本上只是一个包含CSS类名和ID的包装元素),然后添加我所有的灵活内容(图像,所见即所得等)。

我想要做的是为非管理员隐藏一些字段。我不希望任何旧的编辑器能够进入并更改部分的ID或类名(因为它会弄乱布局)。

我知道ACF管理员中的“规则”面板,您可以选择仅将某个字段组显示为一种类型的用户角色,但我想要的是同样的事情但对于个别领域。

从管理界面看来似乎不可行,但我想知道是否有人知道如何从我的functions.php文件中完成它?也许我可以根据当前用户的角色挂钩并禁用某些字段?

我附上了两个截图,显示了我想隐藏的内容:

我想在“添加行”菜单中隐藏这些选项:

enter image description here

我希望这些面板对非管理员不可见:

enter image description here

编辑:当我们在这里时,我不介意将个别字段隐藏起来也是可重复的。您会注意到第一个屏幕截图中的“修饰符”字段,也可以隐藏非管理员。我想这两个问题的解决方案几乎相同吗?

2 个答案:

答案 0 :(得分:1)

我还没有设法隐藏字段,但我 设法禁用它们。不幸的是,仅仅在/maxrest/rest/mbo/ticket?_maxItems=20&_rsStart=31 操作中将它们设置为禁用状态并不足以将其从下拉菜单中删除,因此我还在管理页面中添加了一些CSS,以便至少在视觉上隐藏它们。这很好看,因为网站的编辑们没有尽力打破它。

acf/load_field

答案 1 :(得分:1)

从ACF 5.0.0开始,没有禁用字段或输出CSS的简便方法。如果您使用acf/prepare_field钩子并返回false,则该字段将不会呈现。

<?php
function so37111468_hide_field( $field ) {

  // hide the field if the current user is not able to save options within the admin
  if ( ! current_user_can( 'manage_options' ) ) {
    return false;
  }

  return $field;
}

add_filter( 'acf/prepare_field/key=MYFIELDKEY', 'so37111468_hide_field' );
?>

可以在以下位置找到该过滤器的文档:https://www.advancedcustomfields.com/resources/acf-prepare_field/