Доброго дня всем! Существует плагин для WP под названием WP-Shop для создания интернет-магазина. Вопрос, наверное, поймут только те, кто имел с ним дело. Так вот. Товары в нем забиваются как записи. У записей есть доп. поля. Для обозначения модификаций товара и цен на них используются поля name_N и cost_N, где N - номер поля от 1 и до... (не знаю до скольки))). Так вот, есть там функция вывода этих товаров на витрину. Дело в том, что на витрину выводятся все модификации и цены, а нужно выводить лишь только name_1 и cost_1. То есть работает какой-то цикл, который перебирает массив. А мне бы от цикла избавиться и выводить только первые элеменыты. Я вот ни разу не программист и своими силами мне это победить не удалось. Насколько я понял, функция вывода этих данных такая: Код (Text): public function GetGoodWidget($post = null, $class = "", array $columns = array('name'=>true,'cost'=>true)) { if ($post == null) { global $post; } $cost = false; $cost0 = array(); $name0 = array(); $sklad0 = array(); $sklad = array(); $count0 = array(); $count = array(); $meta = get_post_custom($post->ID); $sort_type = get_option('wpshop.sort_price'); $price_trim = get_option('wpshop.price_trim'); //Properties of good //$meta_properties = ''; if($meta){ foreach ($meta as $key => $val) { if ( preg_match('/^cost_(\d+)/i', $key, $m) ) { $cost0[$m[1]] = $val[0]; } if ( preg_match('/^name_(\d+)/i', $key, $m) ) { $name0[$m[1]] = $val[0]; } if ( preg_match('/^sklad_(\d+)/i', $key, $m) ) { $sklad0[$m[1]] = $val[0]; } if ( preg_match('/^count_(\d+)/i', $key, $m) ) { $count0[$m[1]] = $val[0]; } }} if (count($cost0) > 1){ $cost = array(); ksort($cost0); foreach ($cost0 as $key => $val1){ if (isset($name0[$key])){ $val = $name0[$key]; }else{ $val = $key; } if($price_trim) { $cost[$val] = round($cost0[$key],2); }else { $cost[$val] = $cost0[$key]; } if (isset($sklad0[$key])){ $sklad[$val] = $sklad0[$key]; } if (isset($count0[$key])){ $count[$val] = $count0[$key]; } } if ($sort_type==1){ asort($cost); } if ($sort_type==2){ arsort($cost); } }else if(count($cost0) > 0) { $cost = array(); ksort($cost0); foreach ($cost0 as $key => $val1){ if (isset($name0[$key])){ $val = $name0[$key]; }else{ $val = ''; } if($price_trim) { $cost[$val] = round($cost0[$key],2); }else { $cost[$val] = $cost0[$key]; } if (isset($sklad0[$key])){ $sklad[$val] = $sklad0[$key]; } if (isset($count0[$key])){ $count[$val] = $count0[$key]; } } } if ($cost) { if ($sort_type==1){ asort($cost); } if ($sort_type==2){ arsort($cost); } ob_start(); $this->view->class = $class; $this->view->cost = $cost; $this->view->sklad = $sklad; $this->view->count = $count; $this->view->columns = $columns; $this->view->post = $post; $this->view->render("good.widget.inc.php"); return ob_get_clean(); } return ""; } Может кто-то мне подскажет что тут надо подправить? Не пинайте сильно, очень надо. Если нужны еще какие-то данные, с удовольствием предоставлю. Премного благодарен.
Да. Сам уже понял, что он там, но вот как его изменить я не понял. Может поможет кто? Код (Text): <div class="wpshop_bag <?php echo $this->class;?>"> <input type='hidden' name="wpshop-good-title-<?php echo $this->post->ID;?>" value='<?php echo htmlspecialchars($this->post->post_title,ENT_QUOTES);?>'/> <div class="wpshop_buy"> <table cellpadding="5" cellspacing="0" border="0" width="100%"> <?php $i = 0; foreach ($this->cost as $key => $val) { $i++; if (!isset($this->sklad[$key])||(isset($this->sklad[$key])&&($this->sklad[$key] > 0||$this->sklad[$key] == "" ))) { if(isset($this->sklad[$key])) { $sklad_value = $this->sklad[$key]; }else { $sklad_value = ''; } $yandex_num = get_option("wpshop.yandex_metrika"); if($yandex_num){$addClick = "addtocart('{$this->post->ID}', '{$key}', '".get_permalink($this->post->ID)."', '{$val}', document.getElementById('goods_count_{$this->post->ID}_{$i}').value, '{$i}','{$sklad_value}'); yaCounter{$yandex_num}.reachGoal('wpshop_click',{id:'{$this->post->ID}'}); return false;";}else{ $addClick = "addtocart('{$this->post->ID}', '{$key}', '".get_permalink($this->post->ID)."', '{$val}', document.getElementById('goods_count_{$this->post->ID}_{$i}').value, '{$i}','{$sklad_value}'); return false;";} ?> <tr class="line_<?php print $i; ?>"> <?php if (isset($this->columns['name'])){?> <td class="wpshop_caption"> <a style="cursor: pointer" href="#" onclick="javascript:<?php echo $addClick; ?>;" style="font-weight:bold;"><?php print $key; ?></a> </td> <?php } ?> <?php if (isset($this->columns['cost'])) { ?> <td class="wpshop_price"> <?php echo ($val . ' ' .CURR); ?> </td> <?php } ?> <td class="wpshop_count"> <input maxlength='4' type='text' <?php if (isset($this->count[$key])&&$this->count[$key]>0){ echo "value='".$this->count[$key]."'";}else{echo "value='1'";}?> name='goods_count_<?php echo "{$this->post->ID}_{$i}";?>' id='goods_count_<?php echo "{$this->post->ID}_{$i}";?>' size='3' /> </td> <td class="wpshop_button"> <a href="#" onclick="<?php echo $addClick; ?>" class="arrow_button" alt="<?php echo __('Add', 'wp-shop'); /*Добавить*/ ?>" title="<?php echo __('Order', 'wp-shop'); /*Заказать*/ ?>"></a> </td> </tr> <?php if (isset($this->sklad[$key])&&$this->sklad[$key] > 0){?> <tr class="sklad"> <td colspan="4"> <?php echo __('In stock ', 'wp-shop'); echo ' '.$this->sklad[$key]; echo __(' pcs.', 'wp-shop'); ?> </td> </tr> <?php } ?> <?php } else { echo "<div class='empty_".$i." empty_shop'>"; echo get_option("wpshop.good.noText"); echo "</div>"; } } ?> </table> </div> </div> То есть надо вывести ключ и значение только первого элемента массива. Затупил. Просто поставил break в конце и все заработало, как надо. Всем спасибо!
пробуй перед последней скобкой цикла на строке 60 поставить break; тогда цикл прервется после первой итерации. Возможно, такой вариант подойдет, но будет не верным, ибо следует изменять содержимое массива перебора перед подачей в цикл, а не прерывать работу самого цикла.