У меня не установлен ACF, но после прочтения их руководства я вижу несколько проблем с вашим кодом.
Проблема первая: вы используете как $ images, так и $ images_ids. В конечном итоге, они оба выполняют одну и ту же работу, и именно вам нужно вернуть массив идентификаторов. Их данные могут отличаться от двух последних аргументов.
Тем не менее, когда вы проверяете, есть ли что-то, вы проверяете и анализируете с помощью $ images, но затем вы используете $ images_ids для вашей композиции строки short_code. Что касается ошибки, я думаю, это потому, что версия без необязательных аргументов вернула значение, в то время как версия ($ images_ids), которая использовала необязательные аргументы, не возвращала значение, но все равно использовалась в условии if.
Я думаю, вы должны выяснить, какую версию get_field вы хотите использовать. Один с 3 аргументами или один с 1 аргументом.
Это редактировалось после того, как я заметил что-то, почему вы ничего не получаете, вы можете связаться с ACF, чтобы обновить их руководство. Это утверждение sprintf () ничего не сделает. Это просто будет генерировать пустую строку, которая все. Возможно, вам придется изменить этот sprintf (), как показано ниже, чтобы следовать вашему старому утверждению, если он все еще показывает ошибку преобразования массива в строку, вам нужно будет отладить это.
$image_ids = get_field('product_images', false, false);
if( $image_ids ) {
// Generate string of ids ("123,456,789").
$images_string = implode( ',', $image_ids );
// Generate and do shortcode.
$shortcode = sprintf( '[gallery ids="%s"]', $images_string );
echo do_shortcode( $shortcode );
}