상현에 하루하루
All 개발자의 하루

Sage 9 에서 ACF 필드 배열값 내부 값 선택 불가

( 업데이트: )

🤔 무엇을

Sage9으로 블로그를 옮기면서 Dev 아카이브 페이지에서 각 포스트의 terms 값중 terms의 ACF 필드로 추가된 이미지를 가져와야했다. 카테고리 이미지를 저장한 필드인데

$myterms = wp_get_post_terms(get_the_ID(), get_post_type().'_category');
@foreach ($myterms as $term) {
  @php
  $iconArray = get_field('icon', get_post_type().'_category_'.$term->term_id);
  // laravel blade error
  // 에러 문구
  // Uncaught Exception: Cannot access offset of type string on string...

위처럼 Uncaught Exception: Cannot access offset of type string on string라는 문구와 함께 제대로 동작하지 않는 것이다.

그냥 PHP를 사용하면서는 위와 같은 문제가 발생하지 않았기 때문에 너무나 당황스러웠다.

try 1

구글에 계속 Sage 9 에러문구 관련해서 검색하다가 ACF와 호환이 잘안되는 것같은 이슈 티켓들이 많이 보여서 ACF와 관련해서 찾아보다가

https://discourse.roots.io/t/acf-and-sage-9/12834

해당 문제를 보고서 Sage controller를 사용해보기로 했다.

컨트롤러 내부에서도 동일하게 위 php 문법으로 이미지를 가져오는데 똑같은 이슈가 발생하는 것이다.

실패

하지만 이 문제를 해결하지 않으면 결국 모든 곳에 사용된 ACF를 변경해야하는 문제가 발생하고 플러그인 사용에 발목을 붙잡히는 격이어서 계속 시도하였다.

하지만 나중에 Controller를 통해서 유용하게 변수를 php 문법으로 대입해 줄 수 있는 방법을 찾은 것같아서 너무 삽질은 아니었다.

🔑 해결

이번엔 ACF 플러그인 관련해서 찾아보기 시작했다.

Illegal string offset

ACF에서 잘못된 문자열로 해당 값을 못가져오는 문제를 다루는 이슈 티켓이있어서 이 부분들 찾아보다가 이미지 배열이 아닌 ID와 같은 값을 반환하는?? 정확하게 어떤 문제인지 모르겠지만 이 문제를 해결할 수 있는 해킹 방법으로 내가 겪고있는 문제를 일단 해결했다.

$image = get_field('logo', 'option');
if (!is_array($image)) {
  $image = acf_get_attachment($image);
}
$url = $image['url'];