ACFs:如何更改默认值/设置

3
使用高级自定义字段,
  1. 每当我需要一个图像字段时,我希望它默认输出为数组。
  2. 或者每当我使用所见即所得编辑器时,我不想显示媒体按钮。
  3. 需要一个文本区域?我希望默认情况下没有格式。
如何更改这些默认设置?
是否有任何插件或functions.php的代码段示例?
谢谢!!
Johan
2个回答

3
我正在使用ACF Pro,所以我的答案可能不适用于您...
对于您的前端字段,您可以使用acf/format_value钩子,并更改您想要的$field参数:
add_filter('acf/format_value/type=textarea', 'my_custom_acf_filter_textarea', 1, 3);
function my_custom_acf_filter_textarea($value, $post_id, $field){
    remove_filter('acf/format_value/type=textarea', 'my_custom_acf_filter_textarea', 1);
    $field['new_lines'] = '';
    $newvalue = acf_format_value($value, $post_id, $field);
    return $newvalue;
}

示例图片:

add_filter('acf/format_value/type=image', 'my_custom_acf_filter_image', 1, 3);
function my_custom_acf_filter_image($value, $post_id, $field){
    remove_filter('acf/format_value/type=image', 'my_custom_acf_filter_image', 1);
    $field['return_format'] = 'array';
    $newvalue = acf_format_value($value, $post_id, $field);
    return $newvalue;
}

请注意,您还可以使用此钩子强制特定字段的选项:
acf/format_value/name={$field['_name']}
acf/format_value/key={$field['key']}

对于你的后端显示,使用acf/prepare_field

所见即所得编辑器示例:

add_filter('acf/prepare_field/type=wysiwyg', 'my_custom_acf_filter_wysiwyg', 1);
function my_custom_acf_filter_wysiwyg($field){
    remove_filter('acf/prepare_field/type=wysiwyg', 'my_custom_acf_filter_wysiwyg', 1);
    $field['media_upload'] = 0;
    return $field;
}

对于管理界面的显示,您也可以使用以下语法针对特定字段进行定位:

acf/prepare_field/name={$field['name']}
acf/prepare_field/key={$field['key']}

哇。谢谢Pierre!我也在使用专业版。 - jDelforge
实际上,它还没有起作用... 如果我们专注于所见即所得的情况,要关闭媒体按钮,$field['media_upload'] 必须设置为零。如果我在你的片段中这样做,它不起作用。我去看了一下 wysiwyg.php,将其设置为零就可以了。但目标是在不触碰原始文件的情况下进行工作的黑客方式... 我已经尝试了不同的调整,但没有成功... 尽管如此,我并不是一个 PHP/WordPress 过滤器/动作英雄。 - jDelforge
1
一个重要的点:这些代码片段将完成显示的工作(前端的值和后端的字段),但它们不会在ACF字段设置表单上检查/选择正确的选项。 - Pierre
哈!你觉得还有其他方法来解决这个问题吗? - jDelforge
1
是的,这甚至更容易!看看我的新答案。 - Pierre

1

好的,如果想强制设置ACF字段,你需要使用另一个钩子,名为acf/update_field/。它的用法与之前介绍的类似:

add_filter('acf/update_field/type=wysiwyg', 'my_custom_acf_filter_wysiwyg', 1);
function my_custom_acf_filter_wysiwyg($field){
    $field['media_upload'] = 0;
    return $field;
}

您可以使用以下内容来针对特定字段:

acf/update_field/name={$field['name']}
acf/update_field/key={$field['key']}

当设置保存后,它们将采用您自定义的值。

1
太棒了!虽然在不保存字段的情况下无法更改默认设置...但这是最好的解决方案...或者我们需要修改原始文件。不管怎样...对我来说都可以。谢谢Pierre! - jDelforge
我已经在ACF论坛上发布了解决方案。你做得更进一步;)。 https://support.advancedcustomfields.com/forums/topic/how-to-change-default-settings-of-fields/ - jDelforge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接