WordPress ACF как фильтровать содержимое поля текстовой области

#wordpress #wordpress-theming #advanced-custom-fields #custom-wordpress-pages #acfpro

Вопрос:

Я создаю тему WordPress, которая использует расширенные пользовательские поля (плагин ACF). У меня есть следующая функция через 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' ); ?>
 

Комментарии:

1. Каков тип вашего поля ACF? Это а Wysiwyg ? Это а textarea ? Это simple text поле?

2. Я только что понял, что это поле текстовой области. Это объясняет, почему фильтр не работает. Фейспалм!

3. Спасибо @Ruvee. Я только что попробовал ваш ответ, и, похоже, он не работает.

Ответ №1:

Если ваше поле ACF равно a textarea , то вы хотели бы использовать acf/format_value/type=textarea крючок фильтра вместо использования acf_the_content , который будет применен wysiwyg .

 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;

}
 

Комментарии:

1. Я буквально собирался предложить то же самое решение, но оно все равно не работает. Странно, потому что это именно то, что предлагает документация ACF. Может ли это иметь какое-либо отношение к тому, что это поле опций? Я пытался <?php echo get_field( 'text', 'option' ); ?> и <?php the_field( 'text', 'option' ); ?> .

2. Интересно, что я только что попробовал ваш фрагмент, add_filter('acf/format_value/key=field_abc123456, 'filter_p_tags_acf', 10, 3); и он отлично работает. По какой-то причине у него возникают проблемы с поиском полей текстовой области.

3. Спасибо, что нашли время помочь мне 🙂