Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ACF禁用/隐藏多个用户名字段的选择选项_Php_Wordpress_Advanced Custom Fields - Fatal编程技术网

Php ACF禁用/隐藏多个用户名字段的选择选项

Php ACF禁用/隐藏多个用户名字段的选择选项,php,wordpress,advanced-custom-fields,Php,Wordpress,Advanced Custom Fields,我使用的是高级自定义字段,我有一个名为“packages”的字段,有几个选择选项。用户可以在登录时创建和更改包。对于特定用户,此字段的某些选项不应可见。不是用户角色,而是用户名 这是选项,如果用户是“特定用户名”,则粗体选项不应可见或只读 备用条目 备用启动 备份介质 -备份专业版 我搜索了很多,找到了很多文章,我设法让它工作起来,用这部分代码禁用了整个字段: function my_acf_prepare_field_wordpress( $field ) { $current_u

我使用的是高级自定义字段,我有一个名为“packages”的字段,有几个选择选项。用户可以在登录时创建和更改包。对于特定用户,此字段的某些选项不应可见。不是用户角色,而是用户名

这是选项,如果用户是“特定用户名”,则粗体选项不应可见或只读

  • 备用条目
  • 备用启动
  • 备份介质 -备份专业版
我搜索了很多,找到了很多文章,我设法让它工作起来,用这部分代码禁用了整个字段:

function my_acf_prepare_field_wordpress( $field ) {
    $current_user = wp_get_current_user();

    if( $current_user->user_login == "Username" ) {
        if( $field['value'] ) {
            $field['disabled'] = true;
        }
    }
    return $field;
}

add_filter('acf/prepare_field/name=package_or_service', 'my_acf_prepare_field_wordpress');
此部分基于特定用户名禁用整个字段。是否有办法仅禁用此字段的特定选项

编辑

我做了这些更改以获取数组的索引值并取消设置,但到目前为止运气不佳:

function my_acf_prepare_field_wordpress( $field ) {
    $current_user = wp_get_current_user();

    if( $current_user->user_login == "Username" ) {
        $choices = $field['choices'];
        unset($field['choices'][webhosting]);

    }
    return $field;
}

add_filter('acf/prepare_field/name=package_or_service', 'my_acf_prepare_field_wordpress');
Vardump
数组(6){[“网络主机”]=>string(10)“网络主机”[“vps主机”]=>string(11)“vps主机”[“经销商主机”]=>string(16)“经销商主机”[“Domennaam”]=>string(10)“Domennaam”[“电子邮件”]=>string(5)“电子邮件”[“专用服务器”]=>string(16)“专用服务器”}

我认为ACF目前没有任何机制可以禁用单个选项。不过,您可以完全删除该选项,首先从
$field['choices']
中删除相应的条目,谢谢您的回复。删除甚至比取消该选项更好。你是说我可以获得所有选项,然后删除我想要删除的特定选项?
$field['choices']
应该已经保存了为该字段配置的所有选项,你可以在他们的支持论坛中查看类似的讨论,例如,他们在那里使用
load\u字段
过滤器,而不是
prepare\u字段
,但不确定这是否有区别。我认为您不应该在这里使用
get\u field\u对象-
$field
已经作为参数传递到此函数,它应该已经包含字段数据。放置
var\u转储($field);退出并检查它实际包含的内容。
[“choices”]=>数组(6){[“webhosting”]=>字符串(10)“webhosting”
-好的,它似乎是一个关联数组,而不是一个数字索引数组。因此
取消设置($field['choices']['webhosting']);
应该去掉该选项。(用实际要删除的选项的键替换
webhosting
。)