Столкнулся с одной очень неприятной вещью, не могу никак понять как обработать на вывод в шорткод вордпресса несколько значений из массива, с единичными всё нормально ретурном возвращается что нужно, но если дело доходит до пакетного вывода, то тут уже косяк, выводится последнее значение и только, если выводить echo'м, то он выпадает из стиля и добавляется вверх контента, что соответственно не даёт с ним работать как с шорткодом PHP: function p_qwe(){//тут ненужный код подгрузки массива if ($status != 200) { echo 'Error: </br>'; } else { $arr = json_decode(gzdecode(substr($result, $headerSize)), true); foreach ($arr as $val) { if (strpos($val['code'], 'QWE-') == 'QWE-') { $price = number_format((float)$val['price_list']['значение'], 0, '', ' '); } } }return $price;}
не понятно что ты хочешь получить.. что ты хочешь, чтобы возвращал метод p_qwe в случае с массивом, где больше чем один элемент?
да и дальше ухродит на шорткод Код: function p_123() { return p_qwe(); } add_shortcode('p_123', 'p_123');[code] там по такой сортировке около 10 строчек должно получится.
к сожалению, мне это ничего не говорит, т.к. wordpress я не ворочал никогда. Я хочу понять, что ты хочешь, чтобы вернула функция) сейчас она у тебя отдаёт последний элемент в массиве. можно к примеру собрать все коды в один массив и вывести через запятую (или любой другой разделитель) или же вернуть массив, а дальше уже всю магию будет делать твой add_shortcode
ну если на уровне функций то да, в функцию надо вернуть все значения по фильтру Код: >'QWE-') == 'QWE-' к примеру так <td>значение 1</td> <td>значение 3</td> <td>значение 4</td> <td>значение 5</td> в реальности там надо таблицу в каждой строчке по 3 столбца, но это я уже сам допишу, я не могу понять как мне все значения в функцию вернуть а не только последнее, я так предполагаю надо собрать массив из массива и его уже в функцию вернуть, но как-то не смог дотямкать как сделать
PHP: function p_qwe(){ //тут ненужный код подгрузки массива if ($status != 200) { echo 'Error: </br>'; } else { $arr = json_decode(gzdecode(substr($result, $headerSize)), true); $prices = []; foreach ($arr as $val) { if (strpos($val['code'], 'QWE-') == 'QWE-') { $prices[] = number_format((float)$val['price_list']['значение'], 0, '', ' '); } } } return $prices;} функция вернёт массив со значениями
Ну все правильно, у вас при нескольких значениях выводится последнее, потому что $prices = number_format(); располагается внутри цикла foreach и перезаписывается при каждом проходе по $arr... Делайте массив вывода или в строку через запятую через оператор .= (что, в общем-то криво...). Лучше массив, как написано чуть выше, с добавлением [], а потом обрабатывайте как нужно.
помогите уже добить не даётся мне php хоть ты тресни. есть обработчик Код: function test() { if ($status != 200) { echo '...'; } else { $arr = бла бла бла; $price = []; foreach ($arr as $val) { if (strpos($val['code'], 'QWE-') == 'QWE-') { $price[] = '<tr><td class="articul"><i class="ico-price-art"></i>' . $val['code'] . '</td><td class="description">' //. $code . $val['name'] . '</td><td class="price"><i class="ico-price"></i>' . number_format((float)$val['price_L']['Значение'], 0, '', ' ') . ' <span>₽</span></td></tr>';; } } } return $priceSelenda; } возвращается массив Array([0]=>значение, [1] => значение и т.д) и есть вывод на сайт через шорткод на вордпресс Код: function test1() { return test(); } add_shortcode('test', 'test'); выводит он естественно Array и всё, как обработать массив так чтобы вывести уже непосредственно значения, я понимаю что это элементарно для некоторых но меня уже он бесит что доделать не могу.
PHP: function test(){ if ($status != 200) { echo '...'; } else { $arr = бла бла бла; $price = []; foreach ($arr as $val) { if (strpos($val['code'], 'QWE-') == 'QWE-') { $price[] = '<tr><td class="articul"><i class="ico-price-art"></i>' . $val['code'] . '</td><td class="description">' //. $code . $val['name'] . '</td><td class="price"><i class="ico-price"></i>' . number_format((float)$val['price_L']['Значение'], 0, '', ' ') . ' <span>₽</span></td></tr>';; } } } return implode(' ', $price);} вернёт строку.