Передача переменной из цикла FOREACH через ссылку
Как передать переменную из цикла foreach через ссылку? У меня есть вкладки, которые отображаются правильно. jQuery работает. Но когда я вызываю переменную $category в месте сортировки контента, $category не имеет значения.
<ul id="tabs">
<li id="tab-content-all" class="active-tab">
<a href="javascript:viewTab('content-all');">ALL</a>
</li>
<?php
$categories = get_categories('child_of=104');
foreach ($categories as $category) {
$option = '<li id="tab-content-';
$option .= $category->cat_name;
$option .= '"><a href="javascript:viewTab(\'content-';
$option .= $category->cat_name;
$option .='\');">';
$option .= $category->cat_name;
$option .= '</a></li>';
echo $option;
}
?>
</ul><!--конец вкладок-->
<div id="contents-container">
<div id="content-all">
<ul class="gallery">
<?php
/** Получаем посты по категории */
$portfolio_posts = new WP_Query('category_name=portfolio');
/** Инициализируем вывод */
$output = '';
/** Цикл по постам */
while ($portfolio_posts->have_posts()): $portfolio_posts->the_post();
/** Добавляем миниатюру к ссылке если есть */
$output .= '<li class="g_image"><a href="' . get_permalink($post->ID) . '">';
$size='medium';
if(has_post_thumbnail($post->ID))
$output .= get_the_post_thumbnail($post->ID,$size);
/** Закрываем виджет */
$output .= '</a></li>';
endwhile;
echo $output;
?>
</ul> <!--конец галереи-->
</div><!--конец ALL -->
<?php
$output = '';
$output = '<div id="content-'.$category->cat_name.'">';
?>
<ul class="gallery">"
<?php
$category_name = strtolower($category->cat_name);
/** Получаем посты по категории */
$portfolio_posts = new WP_Query('category_name='.$category_name);
/** Инициализируем вывод */
$output = '';
/** Цикл по постам */
while ($portfolio_posts->have_posts()): $portfolio_posts->the_post();
/** Добавляем миниатюру к ссылке если есть */
$output = $category_name;
$output .= '<li class="g_image"><a href="' . get_permalink($post->ID) . '">';
$size='medium';
if(has_post_thumbnail($post->ID))
$output .= get_the_post_thumbnail($post->ID,$size);
/** Закрываем виджет */
$output .= '</a></li>';
endwhile;
echo $output;
rewind_posts();
?>
</ul> <!--конец галереи-->
</div><!--конец ALL -->
Вкладки на jQuery работают. Спасибо.

Это скорее базовый вопрос по PHP, но он всё же довольно важен. Внутри вашего цикла foreach
переменная $category
определена локально. Это означает, что она существует только внутри цикла foreach
.
Итак, если у вас есть:
foreach ( $categories as $category ) {
// Здесь вы можете свободно использовать $category
}
// Здесь $category уже не существует
Так работают итеративные циклы... Даже если бы переменная всё ещё существовала вне foreach
, у вас не было бы способа узнать, к какой конкретно $category
вы обращаетесь.
Судя по всему, вам нужна категория портфолио (я предполагаю, что её ID — 104, основываясь на вашем предыдущем коде).
Вы всё равно можете получить эту категорию по её ID, просто убедитесь, что дали ей уникальное имя, а не просто $category
:
$parent_category = get_category( 104 );
$parent_category_name = $parent_category->name;
И теперь вы можете спокойно продолжать работать.
