• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

foreach-Schleife in if-Abfrage

tigtman

Mitglied
Hallo zusammen,

vorweg: Ich bin noch nicht sehr bewandert, was PHP betrifft.

Ich versuche gerade in Wordpress mir mit Hilfe des "Advanced Post Slider"-Plugins die Kategoriebilder (Plugin: http://zahlan.net/blog/2012/06/categories-images/) ausgeben zu lassen. Dies funktioniert auch soweit, nur werden die Kategoriebilder nicht nur einmal geladen. Ich denke, dass das an der foreach-Schleife liegt.

Nachfolgend der Code vom Slider:
Code:
<div class="advps-slide">
        <?php if( $container['advps_ed_link']=='enable'){?><a target="<?php echo $container['advps_link_target'];?>" href="<?php if($container['advps_link_type'] == 'permalink'){the_permalink();}else{echo get_post_meta($post->ID,'advps_custom_link',true);}?>"><?php }?>
        <?php
              if(has_post_thumbnail()){
                $advps_custom_thumb = $wpdb->get_results("select width,height,crop from ".$wpdb->prefix."advps_thumbnail where thumb_name = '".$container['advps_thumbnail']."'");
                if($advps_custom_thumb){
                    $thmb_image = wp_get_attachment_url( get_post_thumbnail_id());
                    $advps_image = aq_resize( $thmb_image, $advps_custom_thumb[0]->width, $advps_custom_thumb[0]->height,$advps_custom_thumb[0]->crop,true,true);
                    echo '<img src="'.$advps_image.'" width="'.$advps_custom_thumb[0]->width.'" height="'.$advps_custom_thumb[0]->height.'" alt="'.get_the_title().'" />';
                }
                else
                {
                    the_post_thumbnail($container['advps_thumbnail']);
                }
            }
            elseif(isset($container['advps_default_image']) && $container['advps_default_image'] != '')
            {
        ?>
                 <img src="<?php echo $container['advps_default_image'];?>" class="wp-post-image" alt="<?php the_title();?>" />
        <?php
            }
      ?>
        <?php if( $container['advps_ed_link']=='enable'){?></a><?php }?>

Und das wäre der Code von den Kategoriebildern:
Code:
<ul>
<?php foreach (get_categories() as $cat) : ?>
<li>
<img src="<?php echo z_taxonomy_image_url($cat->term_id); ?>" />
<a href="<?php echo get_category_link($cat->term_id); ?>"><?php echo $cat->cat_name; ?></a>
</li>
<?php endforeach; ?>
</ul>

Nun habe ich beides so kombiniert:
Code:
<?php elseif($template == 'two'):?>
    <div class="advps-slide">
       
        <?php query_posts( 'cat=4' ); ?>
        <?php foreach (get_categories() as $cat) : ?>
            <img src="<?php echo z_taxonomy_image_url($cat->term_id); ?>" />
         <?php endforeach; ?>
        
        <?php if( $container['advps_ed_link']=='enable'){?></a><?php }?>
    </div>

An welcher Stelle müsste ich nun "schrauben", damit mir die Bilder nur je einmal ausgegeben werden?

Herzlichen Dank.
 
Werbung:
Die foreach-Schleife muss natürlich ausserhalb des DIVs (advps-slide) liegen.

So funktioniert es:
Code:
<?php elseif($template == 'two'):?>
<?php query_posts( 'cat=4' ); ?>
<?php foreach (get_categories() as $cat) : ?>
   
    <div class="advps-slide">
        <img src="<?php echo z_taxonomy_image_url($cat->term_id); ?>" />
    </div>
   
<?php endforeach; ?>
 
Nun werden leider noch zusätzlich sehr viele leere Elemente ausgegeben. Besteht die Möglichkeit innerhalb des o. g. Scripts, leere Elemente auszuschließen?
 
Werbung:
Nun werden leider noch zusätzlich sehr viele leere Elemente ausgegeben. Besteht die Möglichkeit innerhalb des o. g. Scripts, leere Elemente auszuschließen?

Bei so halben Scripts erkennt wohl niemand die Zusammenhänge.

Was verstehst du unter leeren Elementen?
Dein letzter Code-Ausschnitt müsste nämlich zumindest <img src=""> ausgeben - das ist nicht "leer"!
 
Du hast recht. Es sind nicht alle "leer" (ohne img src). Aber, die anderen wiederholen sich ein paar Mal. Es kommt mir fast so vor, als wenn die foreach-Schleife nicht selbstständig stoppt.

Dieser Code wird 10mal wiederholt ausgegeben:

Code:
<div class="advps-slide1">
        <a href="http://hannemann-media.ch/clients/mediaag_tmp/?cat=5"><img src="http://hannemann-media.ch/clients/mediaag_tmp/wp-content/uploads/2014/07/AVG_Glarnerland.jpg" alt="" /></a>
    </div>
   
       
    <div class="advps-slide1">
        <a href="http://hannemann-media.ch/clients/mediaag_tmp/?cat=12"><img src="http://hannemann-media.ch/clients/mediaag_tmp/wp-content/uploads/2014/07/awg.png" alt="" /></a>
    </div>
   
       
    <div class="advps-slide1">
        <a href="http://hannemann-media.ch/clients/mediaag_tmp/?cat=10"><img src="" alt="" /></a>
    </div>
   
       
    <div class="advps-slide1">
        <a href="http://hannemann-media.ch/clients/mediaag_tmp/?cat=7"><img src="" alt="" /></a>
    </div>
   
       
    <div class="advps-slide1">
        <a href="http://hannemann-media.ch/clients/mediaag_tmp/?cat=13"><img src="" alt="" /></a>
    </div>
   
       
    <div class="advps-slide1">
        <a href="http://hannemann-media.ch/clients/mediaag_tmp/?cat=4"><img src="" alt="" /></a>
    </div>
   
       
    <div class="advps-slide1">
        <a href="http://hannemann-media.ch/clients/mediaag_tmp/?cat=11"><img src="http://hannemann-media.ch/clients/mediaag_tmp/wp-content/uploads/2014/07/promega.png" alt="" /></a>
    </div>
   
       
    <div class="advps-slide1">
        <a href="http://hannemann-media.ch/clients/mediaag_tmp/?cat=3"><img src="" alt="" /></a>
    </div>
   
       
    <div class="advps-slide1">
        <a href="http://hannemann-media.ch/clients/mediaag_tmp/?cat=14"><img src="" alt="" /></a>
    </div>
   
       
    <div class="advps-slide1">
        <a href="http://hannemann-media.ch/clients/mediaag_tmp/?cat=6"><img src="" alt="" /></a>
    </div>
   
       
    <div class="advps-slide1">
        <a href="http://hannemann-media.ch/clients/mediaag_tmp/?cat=9"><img src="" alt="" /></a>
    </div>
 
Und so klappt es nun:

Code:
 <?php elseif($template == 'two'):?>
   
   
    <?php query_posts( 'cat=4' ); ?>
    <?php foreach (get_categories() as $cat) : ?>
    <?php $cat_image = z_taxonomy_image_url($cat->term_id);
        if (!empty($cat_image)) :
    ?>
   
        <div class="advps-slide1">
            <a href="<?php echo get_category_link($cat->term_id); ?>"><img src="<?php echo z_taxonomy_image_url($cat->term_id); ?>" alt="" /></a>
        </div>
   
    <?php endif; ?>
    <?php endforeach; ?>
 
Werbung:
Und so klappt es nun:

Code:
 <?php elseif($template == 'two'):?>
  
  
    <?php query_posts( 'cat=4' ); ?>
    <?php foreach (get_categories() as $cat) : ?>
    <?php $cat_image = z_taxonomy_image_url($cat->term_id);
        if (!empty($cat_image)) :
    ?>
  
        <div class="advps-slide1">
            <a href="<?php echo get_category_link($cat->term_id); ?>"><img src="<?php echo z_taxonomy_image_url($cat->term_id); ?>" alt="" /></a>
        </div>
  
    <?php endif; ?>
    <?php endforeach; ?>

Ja, wollte ich auch gerade schreiben, so ungefähr ;)
Eine kleine Optimierung:

PHP:
<a href="<?php echo get_category_link($cat->term_id); ?>"><img src="<?php echo $cat_image; ?>" alt="" /></a>
 
Zurück
Oben