Поддержка Проблемы и решения PHP Return Array from API — Plugin

  • Решено Marten

    (@marten1)


    Добрый день, имею два вопроса, всем спасибо за ответы.

    1. Вывожу Json API через cURL — это все в функции которая имеет шорткод. Весь код в файле php закинутом в папку плагинов — ну по факту персональный короткий плагин. Когда ставлю свой шорткод на страницу вп и сохраняю все работает. Но проблема в том что если я его не деактивирую и хочу отредачить содержимое этой страницы — то ловлю критическую ошибку а до этого текста содержимое своего плагина (ибо выведен через echo), не оч понимаю как решить, чтоб в панели редактирования оно не забирало этот код.

    2. У меня есть подобный код PHP. Мне нужно вернуть его через что-то типо [Return] потому что [Echo] выводит код перед html кодом вне зависимо где вы ставите шорткод — но это логично. Но я не понимаю как мне это сделать, если я получаю большой асинхронный массив из API и скажем задать значение для каждой переменной не совсем реально, тем более я его перебираю через foreach и добавляю условия вывода этого перебора (тоесть часть не нужной инфы у меня не выводит). Я понимаю что можно седлать Return array (), но я не понимаю что мне писать в array, если я не могу задать значения для переменных. Есть вариант [List] но тут я особо не могу понять логику его работы.

    <?php
    
    ...
    
    $data2 = json_decode($response2, true, 999, JSON_THROW_ON_ERROR);
    
    $a = 1;$b = 1;
    foreach ($data2 as $reposit2): if($reposit2['import_export_and_transit_procedures'] ?? $reposit2['enquiry_points'] ?? $reposit2['single_window']):
    echo '<div class="collage-thumb"><a href="#" class="js-open-modal image-link" data-modal="'.$a++.'"><img src="/wp-content/uploads/agora/img/flag/flag'.$reposit2['id'].'.jpg" alt="img" /><div class="thumb-info">'.$reposit2['name'].'</div></a></div>'; 
    else:
        echo "";
    endif;
    endforeach;
    
    ...
    

    Эт просто бред

    <?php
    $content '<div class="collage-thumb"><a href="#" class="js-open-modal image-link" data-modal="'.$a++.'"><img src="/wp-content/uploads/agora/img/flag/flag'.$reposit2['id'].'.jpg" alt="img" /><div class="thumb-info">'.$reposit2['name'].'</div></a></div>';
    return array($content,) 
    
    or
    
    list($content)

    Всем еще раз Спасибо!

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    если я его не деактивирую и хочу отредачить содержимое этой страницы — то ловлю критическую ошибку

    Какую именно? Предполагаю, что нужно переделать код, чтобы возвращал результат, а не выводил на экран.

    Мне нужно вернуть его через что-то типо [Return] потому что [Echo] выводит код

    Попробуйте так:

    
    $output = '';
    
    foreach ( ... ) :
    	if ( ... ) :
    		$output .= '<div class="collage-thumb">...</div>';
    	endif;
    endforeach;
    
    return $output;
    

    или так:

    
    ob_start();
    
    foreach ( ... ) :
    	if ( ... ) :
    		echo '<div class="collage-thumb">...</div>';
    	endif;
    endforeach;
    
    return ob_get_clean();
    
    Автор Marten

    (@marten1)

    Какую именно? Предполагаю, что нужно переделать код, чтобы возвращал результат, а не выводил на экран.

    Это скорее баг или конфликт wp и php. Потому что сейчас, когда я сделал обвертку в div оно больше не выбивает ее. А до этого когда была обвертка просто в <p>, когда я нажимал на редактирование страницы оно писало критическую ошибку в рамке, а до этого текста оно выводило все содержимое которое я выводил в той же рамке ошибки. Но почему я говорю о баге или о конфликте. Потому что при p на самой странице не было полосы прокрутки то есть где то задевался скорее всего width страницы и возможно из-за этого wp не мог адекватно зарендерить его в редаторе и я думаю поэтому он и говорил о критической ошибке.

    Попробуйте так:

    Большое спасибо! Это работает!

    На самом деле я пробовал писать первую версию того кода, что вы мне привели, но ловил ошибку. Мой косяк был в том что я в своем коде не писал пустую переменную $output = ''; а сразу ставил равенство и возврат. А как увидел ваш код, сразу в голове — Семен, семенович . А куда ж оно это будет записывать если у него нет пустой переменной

    • Ответ изменён 2 года назад пользователем Marten.
Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Тема «PHP Return Array from API — Plugin» закрыта для новых ответов.