#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. Спасибо, что нашли время помочь мне 🙂