• Gelöst Oliver

    (@oliverseimo)


    Hallo, ich habe mir selber eine Loop zusammengebastelt und möchte diese als Shortcode in den Visual Composer integrieren. Dazu muss ich das ganze als eine Funktion abspeichern, einen Shortcode erstellen und diesen dann im Visual Composer verknüpfen.
    Hab ich alles gemacht, nur leider funktioniert’s nicht.

    Das ist meine Loop:

     <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    	 <div class="col-md-4  text-default" >
    		<div class="service_teaser vertical">
    		   <div class="service_photo">
    				<figure style="background-image:url(<?php if ( has_post_thumbnail() ) {the_post_thumbnail_url();}?>)"></figure>
    		   </div>
    		   <div class="service_details">
    			  <h2><a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
    			  <p><?php the_content(); ?></p>
    		   </div>
    		</div>
    	 </div>
     <?php endwhile; else : ?>
     <h2>Leider keine News vorhanden</h2>
     <?php endif; ?>

    Daraus habe ich diese Funktion in functions.php geschrieben:

    function eigene_news() {
    	if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    	 <div class="col-md-4  text-default" >
    		<div class="service_teaser vertical">
    			<div class="service_photo">
    				<figure style="background-image:url(<?php if ( has_post_thumbnail() ) {the_post_thumbnail_url();}?>)"></figure>
    			</div>
    			<div class="service_details">
    				<h2><a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
    				<p><?php the_content(); ?> </p>
    			</div>
    		</div>
    	</div>
    	 <?php endwhile; else : ?>
    		<h2>Leider keine News vorhanden</h2>
    	<?php endif; 	
    }
    add_shortcode( 'shortcode_eigene_news', 'eigene_news' );

    Wenn ich diese Funktion nun in Visual Composer integrier, wird der gesamte Visual-Composer-Inhalt sehr oft wiederhold, und da wo mein Loop sein sollte wird die Else-Bedingung, Also „Leider keine News vorhanden“ angezeigt

    Was habe ich falsch gemacht? Habe ich einen Fehler in der Loop oder hab ich etwas beim Integrieren in eine Funktion nicht ganz verstanden?
    Danke für eure Hilfe

Ansicht von 2 Antworten – 1 bis 2 (von insgesamt 2)
  • Die Loop ist eine Ausgabe von Beiträgen, sinngemäß „Hast du Posts? OK, solange du Posts hast, gib mir einen Post nach dem anderen als Objekt zurück. Davon dann bitte den Titel, den Inhalt …“. Bei einer Einzelseite ist die Loop schon nach einem Durchlauf fertig, bei Übersichtsseiten werden soviel Beiträge ausgegeben, wie du unter Einstellungen > Lesen vorgegeben hast.

    Bei deiner Funktion nehme ich an, dass sie zusätzlich zu der normalen Ausgabe der Seite noch Beiträge abrufen soll, vielleicht von einer vorher definierten und zugewiesenen Kategorie „News“? Was dann fehlt, ist eine Abfrage, die solche Beiträge erst einmal aus der Datenbank holt, damit die Loop dann auch tatsächlich Posts findet.

    // WP_Query arguments
    $args = array(
            'category_name'   => 'news'
    	'posts_per_page'  => '-1',
    );
    
    // The Query
    $meine_news = new WP_Query( $args );
    
    // The Loop
    if ( $meine_news->have_posts() ) {
    	while ( $meine_news->have_posts() ) {
    		$meine_news->the_post();
    		// hier deine Ausgabe
    	}
    } else {
    	// hier die Ausgabe, wenn keine Beiträge vorhanden sind
    }
    
    // Restore original Post Data
    wp_reset_postdata();

    Am Ende der Abfrage musst du alles so zurücksetzen, dass der Rest der Seite auch normal angezeigt werden kann. Das erledigst du mit der Funktion wp_reset_postdata();.

    Thread-Starter Oliver

    (@oliverseimo)

    Danke für die Hilfe, jetzt funktioniert es!

Ansicht von 2 Antworten – 1 bis 2 (von insgesamt 2)
  • Das Thema „Loop als Funktion speichern“ ist für neue Antworten geschlossen.