WordPress ACF如何过滤一个textarea字段内容

WordPress ACF how to filter a textarea field content

我正在构建一个使用 Advanced Custom Fields(ACF 插件)的 WordPress 主题。我通过 functions.php 具有以下功能:

function filter_p_tags( $content ) {
    $content = str_replace( '<p>','<p class="custom__class">', $content );
    return $content;
}
add_filter('the_content', 'filter_p_tags');
add_filter('acf_the_content','filter_p_tags');

帖子和页面中的 <p> 标签已成功替换为 <p class="custom__class">。但是,我的 ACF 字段没有被过滤。我在这里做错了什么?

值得一提的是,有问题的 ACF 字段属于选项页面。下面是选项字段在我的一个模板中的样子。

<?php the_field( 'text', 'option' ); ?>

如果您的 ACF 字段是 textarea,那么您会希望使用 acf/format_value/type=textarea 过滤器挂钩,而不是使用将应用于 wysiwygacf_the_content

add_filter('acf/format_value/type=textarea', 'filter_p_tags_acf', 10, 3);

所以你的整个代码应该是这样的:

add_filter('the_content', 'filter_p_tags');

function filter_p_tags( $content ) {

    $content = str_replace( '<p>','<p class="custom__class">', $content );

    return $content;

}

add_filter('acf/format_value/type=textarea', 'filter_p_tags_acf', 10, 3);

function filter_p_tags_acf( $value, $post_id, $field ) {

    $value = str_replace( '<p>','<p class="custom__class">', $value );

    return $value;

}


另一种方法

或者,正如您所建议的,我们可以使用 acf/format_value/key={$key} 过滤器挂钩而不是 acf/format_value/type=textarea。像这样:

add_filter('acf/format_value/key=field_abc123456', 'filter_p_tags_acf', 10, 3);

function filter_p_tags_acf( $value, $post_id, $field ) {

    $value = str_replace( '<p>','<p class="custom__class">', $value );

    return $value;

}