如何将两个ACF文本字段合并为第三个ACF文本字段?
问题解答
a) 是否可以将两个ACF文本字段合并为第三个字段?
可以实现,即使使用ACF免费版,也能通过自定义PHP逻辑自动将Video_Poster_Path和Video_Link的内容合并到Merged_HTML字段中,生成你需要的video标签代码。
b) 具体操作步骤及PHP函数实现
操作流程
- 确认已在ACF中创建三个字段:
Video_Poster_Path(文本类型)、Video_Link(文本类型)、Merged_HTML(建议选文本区域类型,方便查看生成的代码)。 - 将下方PHP代码添加到主题的
functions.php文件,或使用自定义代码插件(如Code Snippets)添加,避免主题更新导致代码丢失。
动态生成代码的PHP函数(推荐)
该函数会在调用Merged_HTML字段时自动生成代码,源字段更新时同步刷新结果:
// 动态合并ACF字段生成视频HTML function acf_merge_video_fields($value, $post_id, $field) { // 获取两个源字段的值 $poster_path = get_field('Video_Poster_Path', $post_id); $video_link = get_field('Video_Link', $post_id); // 仅当两个字段都有值时生成代码 if (!empty($poster_path) && !empty($video_link)) { $merged_html = sprintf( '<video poster="%s" controls="controls" controlsList="nodownload" width="880"> <source src="%s" type="video/mp4"> </video>', esc_url($poster_path), esc_url($video_link) ); return $merged_html; } // 字段为空时返回默认值 return $value; } // 绑定到Merged_HTML字段的加载事件 add_filter('acf/load_value/name=Merged_HTML', 'acf_merge_video_fields', 10, 3);
保存时写入代码的PHP函数(备选)
如果希望在保存文章时就把生成的代码写入Merged_HTML字段(而非动态生成),可使用以下代码:
// 保存文章时合并ACF字段生成视频HTML function acf_save_merged_video_html($post_id) { // 跳过自动保存 if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return; // 获取两个源字段的值 $poster_path = get_field('Video_Poster_Path', $post_id); $video_link = get_field('Video_Link', $post_id); if (!empty($poster_path) && !empty($video_link)) { $merged_html = sprintf( '<video poster="%s" controls="controls" controlsList="nodownload" width="880"> <source src="%s" type="video/mp4"> </video>', esc_url($poster_path), esc_url($video_link) ); // 更新Merged_HTML字段 update_field('Merged_HTML', $merged_html, $post_id); } else { // 源字段为空时清空目标字段 update_field('Merged_HTML', '', $post_id); } } add_action('acf/save_post', 'acf_save_merged_video_html', 20);
使用方式
在文章/页面中调用字段时,可直接用短代码:[acf field="Merged_HTML"]
或在模板文件中用PHP调用:
echo get_field('Merged_HTML');
内容的提问来源于stack exchange,提问作者Miles Works
相关产品推荐
相关产品推荐

