Pasar una variable desde un bucle FOREACH en un enlace

7 jun 2012, 21:40:51
Vistas: 2.86K
Votos: 0

¿Cómo pasarías una variable desde un bucle foreach, a través de un enlace? Tengo pestañas que se muestran correctamente. El jQuery funciona. Pero cuando llamo a la variable $category abajo donde se ordena el contenido, $category no tiene valor.

<ul id="tabs">

    <li id="tab-content-all" class="active-tab">
        <a href="javascript:viewTab('content-all');">TODO</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><!--fin de tabs-->
<div id="contents-container">

    <div id="content-all">
        <ul class="gallery">

        <?php
            /**Obtener posts por categoría*/
            $portfolio_posts = new WP_Query('category_name=portfolio');
            /** Iniciar la salida*/
            $output = '';
            /** Bucle a través del post */
            while ($portfolio_posts->have_posts()): $portfolio_posts-> the_post();

                /** Añadir miniatura al enlace si está presente */
                $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);   
                /** Cerrar el widget*/
                $output .= '</a></li>';

            endwhile;
            echo $output;
        ?>  
        </ul>  <!--fin de gallery--> 
    </div><!--fin de TODO -->  


    <?php
        $output = '';
        $output = '<div id="content-'.$category->cat_name.'">';
    ?>
    <ul class="gallery">"

        <?php

            $category_name = strtolower($category->cat_name);


            /**Obtener posts por categoría*/
            $portfolio_posts = new WP_Query('category_name='.$category_name);
            /** Iniciar la salida*/

            $output = '';
            /** Bucle a través del post */
            while ($portfolio_posts->have_posts()): $portfolio_posts-> the_post();

                /** Añadir miniatura al enlace si está presente */
                $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);   
                /** Cerrar el widget*/
                $output .= '</a></li>';

            endwhile;
            echo $output;

            rewind_posts();
        ?>  
    </ul>  <!--fin de gallery--> 
</div><!--fin de TODO -->  

El sistema de pestañas con jQuery funciona. Gracias.

1
Comentarios

Votado para cerrar como fuera de tema. Esta es una pregunta sobre PHP, no sobre WordPress.

Chip Bennett Chip Bennett
8 jun 2012 00:48:04
Todas las respuestas a la pregunta 1
0

Esta es más una pregunta básica de PHP, pero sigue siendo algo importante. Dentro de tu bucle foreach, $category es una variable definida localmente. Es decir, solo existe dentro del bucle foreach.

Así que si tienes:

foreach ( $categories as $category ) {
    // Puedes usar $category todo lo que quieras aquí dentro
}

// Aquí afuera $category deja de existir

Así es como funcionan los bucles iterativos... Incluso si la variable aún existiera fuera del foreach, no tendrías forma de saber a cuál $category te estás refiriendo.

Por lo que parece, la $category que deseas es la de tu portafolio (supongo que tiene un ID de categoría 104 basado en tu código anterior).

Aún puedes obtener esta categoría basándote en su ID, solo asegúrate de darle un nombre único en lugar de $category:

$parent_category = get_category( 104 );
$parent_category_name = $parent_category->name;

Luego puedes continuar sin problemas.

7 jun 2012 23:34:02