我正在开发一个新网站,在那里你可以作为用户登录并自己发布消息(自定义帖子类型)。
他们可以自己填写或选择数据的最大部分,但有几个字段必须自动填写,并且在放置消息时不可见。
例如,我有一个名为“name\\u provider”的高级自定义字段,ID为“field\\u 5b0bc22b22606”,我希望此字段自动填入当前登录用户的用户名。
当有人放置消息时,他的用户名将自动放置在该字段中。但是,该字段可能不可见或不可编辑。
这是可能的还是无法实现的?
我对互联网做了很多研究,但没有发现任何东西。
这里有人告诉我如何实现上述目标?
EDIT
好吧,我做到了这一点:
function set_acf_field_default_value( $field ) {
global $current_user;
get_currentuserinfo();
switch ( $field[\'name\'] ) {
case \'name_provivder\':
$field[\'value\'] = \'\' . $current_user->user_login .\'\';
break;
}
return $field;
}
add_filter(\'acf/load_field\', \'set_acf_field_default_value\' );
这真是太棒了!现在我只有一个问题。
当登录用户创建新帖子时,他可以编辑此字段。如何使这些字段不可编辑?或者我可以隐藏这些字段吗?
EDIT 2
好的,我成功地做到了:
add_filter(\'acf/prepare_field/name=name_provivder\', \'disable_acf_prepare_field\');
function disable_acf_prepare_field( $field ) {
// Does the user have an Office role?
$user = wp_get_current_user();
if ( in_array( \'brons\', (array) $user->roles ) ) {
$usergroup = \'brons\';
}
switch($field[\'_name\']) {
// Which field are we looking for?
case \'name_provivder\':
if ($usergroup == \'brons\') {
// Set the CLASS of the field to use css to hide
$field[\'wrapper\'][\'class\'] = \'hide\';
}
break;
}
return $field;
}
add_action(\'admin_head\', \'my_custom_fonts\');
function my_custom_fonts() {
echo \'<style>
.hide {
display:none;
}
</style>\';
}
如果用户是“brons”,则隐藏此特定字段,是否可以隐藏整个组?文档中没有任何内容。有人有主意吗?
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成
是的,这是可以做到的(几乎总是真的;)。。。问题是如何做到这一点?;)
这是解决方案。。。你必须使用acf/load_field
过滤器:
function set_acf_field_default_value( $field ) {
switch ( $field[\'name\'] ) {
case \'name_provider\':
$field[\'value\'] = \'PUT YOUR VALUE HERE\';
break;
}
return $field;
}
add_filter(\'acf/load_field\', \'set_acf_field_default_value\' );
附:当然你可以使用
if
语句,但您很少只想预填充一个字段,因此使用
switch
.