Передача переменной из цикла FOREACH через ссылку

7 июн. 2012 г., 21:40:51
Просмотры: 2.86K
Голосов: 0

Как передать переменную из цикла 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 работают. Спасибо.

1
Комментарии

Закрыто с пометкой не по теме. Это вопрос по PHP, а не по WordPress.

Chip Bennett Chip Bennett
8 июн. 2012 г. 00:48:04
Все ответы на вопрос 1
0

Это скорее базовый вопрос по 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;

И теперь вы можете спокойно продолжать работать.

7 июн. 2012 г. 23:34:02