$wrapper_classes ]); $tag = $attr['tag'] ?? 'p'; $opening_tag = "<{$tag} {$wrapper_attributes}>"; $closing_tag = "{$tag}>"; // throw if value is empty. if ( ( '' === $field['value'] || is_null( $field['value'] ) || ( is_array( $field['value'] ) && empty( $field['value'] ) ) || false === $field['value'] ) && 'true_false' !== $field['type'] ) { if ( isset( $attr['showMessageIfEmpty'] ) && boolval( $attr['showMessageIfEmpty'] ) && isset( $attr['emptyMessage'] ) && ! empty( $attr['emptyMessage'] ) ) { return $opening_tag . '' . wp_kses_post( $attr['emptyMessage'] ) . '' . $closing_tag; } else { return ''; } } $value = ''; $is_link = isset( $attr['linkToObject'] ) && boolval( $attr['linkToObject'] ); $new_tab = isset( $attr['newTab'] ) && boolval( $attr['newTab'] ); $truncate = ! empty( $attr['truncate'] ) && in_array( $field['type'], array( 'text', 'textarea', 'wysiwyg' ), true ) && is_string( $field['value'] ); switch ( $field['type'] ) { case 'text': $value = esc_html( $truncate ? $this->truncate_text( $field['value'], $attr ) : $field['value'] ); break; case 'textarea': if ( $truncate ) { $value = esc_html( $this->truncate_text( $field['value'], $attr ) ); } else { $value = wp_kses_post( ! empty( $field['new_lines'] ) ? nl2br( $field['value'] ) : $field['value'] ); } break; case 'true_false': if ( boolval( $field['value'] ) && isset( $attr['checkedText'] ) && ! empty( $attr['checkedText'] ) ) { $value = esc_html( $attr['checkedText'] ); } elseif ( isset( $attr['uncheckedText'] ) && ! empty( $attr['uncheckedText'] ) ) { $value = esc_html( $attr['uncheckedText'] ); } break; case 'wysiwyg': if ( $truncate ) { $value = esc_html( $this->truncate_text( apply_filters( 'acf_the_content', $field['value'] ), $attr ) ); } else { $tag = 'div'; $value = apply_filters( 'acf_the_content', $field['value'] ); } break; case 'link': if ( isset( $field['value']['url'], $field['value']['title'] ) ) { $value = $this->create_link( $field['value']['url'], $field['value']['title'], $new_tab ); } break; case 'post_object': case 'relationship': if ( is_array( $field['value'] ) ) { $value = array_map( function( $val ) use ( $is_link, $field, $new_tab ) { if ( $is_link ) { return $this->create_link( get_permalink( $val ), get_the_title( $val ), $new_tab ); } else { return get_the_title( $val ); } }, $field['value'] ); } else { if ( $is_link ) { $value = $this->create_link( get_permalink( $field['value'] ), get_the_title( $field['value'] ), $new_tab ); } else { $value = get_the_title( $field['value'] ); } } break; case 'taxonomy': if ( is_array( $field['value'] ) ) { $value = array_map( function( $val ) use ( $is_link, $field, $new_tab, $attr ) { $term = get_term( $val ); if ( is_wp_error( $term ) || is_null( $term ) ) { return ''; } $return_field = isset( $attr['returnFormat'] ) && isset( $term->{$attr['returnFormat']} ) ? $term->{$attr['returnFormat']} : $term->name; if ( $is_link ) { return $this->create_link( get_term_link( $term ), $return_field, $new_tab ); } else { return esc_html( $return_field ); } }, $field['value'] ); } else { $term = get_term( $field['value'] ); if ( is_wp_error( $term ) || is_null( $term ) ) { break; } $return_field = isset( $attr['returnFormat'] ) && isset( $term->{$attr['returnFormat']} ) ? $term->{$attr['returnFormat']} : $term->name; if ( $is_link ) { $value = $this->create_link( get_term_link( $term ), $return_field, $new_tab ); } else { $value = esc_html( $return_field ); } } break; case 'user': if ( is_array( $field['value'] ) ) { $value = array_map( function( $val ) use ( $is_link, $field, $new_tab, $attr ) { $user = get_userdata( $val ); if ( ! $user ) { return ''; } $return_field = isset( $attr['returnFormat'] ) && isset( $user->data->{$attr['returnFormat']} ) ? $user->data->{$attr['returnFormat']} : $user->data->display_name; if ( $is_link ) { return $this->create_link( get_author_posts_url( $user->data->ID ), $return_field, $new_tab ); } else { return esc_html( $return_field ); } }, $field['value'] ); } else { $user = get_userdata( $field['value'] ); if ( ! $user ) { break; } $return_field = isset( $attr['returnFormat'] ) && isset( $user->data->{$attr['returnFormat']} ) ? $user->data->{$attr['returnFormat']} : $user->data->display_name; if ( $is_link ) { $value = $this->create_link( get_author_posts_url( $user->data->ID ), $return_field, $new_tab ); } else { $value = esc_html( $return_field ); } } break; case 'select': case 'radio': case 'checkbox': case 'button_group': if ( is_array( $field['value'] ) ) { $value = array_map( function( $val ) use ( $attr, $field ) { if ( isset( $attr['returnFormat'] ) && 'label' === $attr['returnFormat'] && isset( $field['choices'][ $val ] ) ) { return esc_html( $field['choices'][ $val ] ); } else { return esc_html( $val ); } }, $field['value'] ); } else { if ( isset( $attr['returnFormat'] ) && 'label' === $attr['returnFormat'] && isset( $field['choices'][ $field['value'] ] ) ) { $value = esc_html( $field['choices'][ $field['value'] ] ); } else { $value = esc_html( $field['value'] ); } } break; case 'email': if ( $is_link ) { $value = $this->create_link( 'mailto:' . $field['value'], $field['value'], false ); } else { $value = esc_html( $field['value'] ); } break; case 'url': if ( $is_link ) { $value = $this->create_link( $field['value'], $field['value'], $new_tab ); } else { $value = esc_url( $field['value'] ); } break; case 'page_link': if ( is_array( $field['value'] ) ) { $value = array_map( function( $val ) use ( $new_tab ) { $link = is_numeric( $val ) ? get_permalink( $val ) : $val; return $this->create_link( $link, $link, $new_tab ); }, $field['value'] ); } else { $link = is_numeric( $field['value'] ) ? get_permalink( $field['value'] ) : $field['value']; $value = $this->create_link( $link, $link, $new_tab ); } break; case 'number': case 'range': $number = ! empty( $attr['formatNumber'] ) ? Formatter::format_number( $field['value'], $attr ) : null; $value = esc_html( null !== $number ? $number : $field['value'] ); break; case 'date_picker': case 'date_time_picker': case 'time_picker': // A block-level date format wins; otherwise match ACF's own output: // acf_format_date() formats the raw stored value with the field's // return_format (localized, timezone-aware). $date = Formatter::format_date( $field['value'], $field['type'], $attr ); $value = null !== $date ? esc_html( $date ) : acf_format_date( $field['value'], $field['return_format'] ); break; case 'google_map': $return_format = $attr['returnFormat'] ?? 'address'; switch ( $return_format ) { case 'lat_lng': $lat = isset( $field['value']['lat'] ) ? $field['value']['lat'] : ''; $lng = isset( $field['value']['lng'] ) ? $field['value']['lng'] : ''; $value = $lat . ', ' . $lng; break; case 'lat': $value = isset( $field['value']['lat'] ) ? $field['value']['lat'] : ''; break; case 'lng': $value = isset( $field['value']['lng'] ) ? $field['value']['lng'] : ''; break; case 'street_number': case 'street_name': case 'street_name_short': case 'city': case 'state': case 'state_short': case 'post_code': case 'country': case 'country_short': $value = isset( $field['value'][ $return_format ] ) ? $field['value'][ $return_format ] : ''; break; case 'address': default: $value = isset( $field['value']['address'] ) ? $field['value']['address'] : ''; break; } // Handle link to Google Maps if ( $is_link && ! empty( $value ) ) { $address = isset( $field['value']['address'] ) ? $field['value']['address'] : ''; $place_id = isset( $field['value']['place_id'] ) ? $field['value']['place_id'] : ''; $map_url = 'https://www.google.com/maps/search/?api=1&query=' . urlencode( $address ); if ( ! empty( $place_id ) ) { $map_url .= '&query_place_id=' . urlencode( $place_id ); } $value = $this->create_link( $map_url, $value, $new_tab ); } else { $value = esc_html( $value ); } break; default: $value = is_array( $field['value'] ) ? array_map( 'esc_html', $field['value'] ) : esc_html( $field['value'] ); break; } // filter empty strings from value if array. if ( is_array( $value ) ) { $value = array_filter( $value, function( $val ) { return '' !== $val; } ); } $value = Helper::apply_filters( 'afb/text/formatted_value', $field, $value, $field, $attr ); if ( '' === $value || ( is_array( $value ) && empty( $value ) ) ) { return ''; } $is_rich_text = 'wysiwyg' === $field['type'] && ! $truncate; $prefix = 'true_false' !== $field['type'] && ! $is_rich_text && ! empty( $attr['prefix'] ) ? $attr['prefix'] : ''; $suffix = 'true_false' !== $field['type'] && ! $is_rich_text && ! empty( $attr['suffix'] ) ? $attr['suffix'] : ''; ob_start(); echo '<' . esc_html( $tag ) . ' ' . wp_kses_post( $wrapper_attributes ) . '>'; if ( ! empty( $prefix ) ) { echo '' . esc_html( $prefix ) . ''; } if ( $is_rich_text ) { echo wp_kses_post( $value ); } elseif ( is_array( $value ) ) { foreach ( $value as $key => $val ) { if ( "ul" === $tag || "ol" === $tag ) { echo '