Создать шорткод галереи WordPress из расширенных пользовательских полей - PullRequest
0 голосов
/ 14 октября 2019

Я следую инструкциям, изложенным на странице галереи ACF по адресу https://www.advancedcustomfields.com/resources/gallery/, в том, как создать собственную галерею Wordpress с использованием шорткода и динамически заполнять идентификаторы элементов из данных в поле галереи ACF.

Пример: РЕДАКТИРОВАТЬ: я немного изменил код, чтобы включить определение для $image_ids

<?php

// Load value (array of ids).
$images = get_field('product_images');
$image_ids = get_field('product_images', false, false);

if( $images ) {

    // Generate string of ids ("123,456,789").
    $images_string = implode( ',', $image_ids );

    // Generate and do shortcode.
    $shortcode = sprintf( '', $images_string );
    echo do_shortcode( $shortcode );
}

Теперь моя проблема заключается в том, что ошибка возвращает сообщение о том, что значение для $ image_ids не определено, иправильно, вообще не вижу, где это определяется.

У меня есть какой-то старый код, который я использовал:

<?php
// different product sizes (gallery)
if(get_field('product_images')) : ?>
    <h3>Product Images</h3>
    <?php 
    $image_ids = get_field('product_images', false, false);
    $shortcode = '[' . 'gallery ids="' . implode(',', $image_ids) . '"]';
    echo do_shortcode( $shortcode );
endif;
?> 

Этот код работает, но возвращает ошибкуphp notice array to string conversion in jetpack-carousel. Да, я использую плагин Tiled Galleries Carousel Without Jetpack.

https://wordpress.org/support/topic/php-notice-array-to-string-conversion-in-jetpack-carousel/page/2/

Я действительно хочу следовать рекомендованному пути, изложенному в документации ACF, но он не работает для меня,Что я делаю не так?

1 Ответ

0 голосов
/ 14 октября 2019

У меня не установлен 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 );
}
...