Frage

Ich habe fast die gleiche Frage gefunden: https://stackoverflow.com/questions/4796165/multiple-loops-in-wordpress-second-loop-not-resetting Aber die Antwort funktioniert bei mir nicht.

Ich habe "Portfolio" -Postentyp und arbeite daran, alle Portfolioelemente anzuzeigen.

Dieser Code funktioniert perfekt auf Seitenportfolio:

$loop = new WP_Query( array( 
        'post_type' => 'portfolio',   
        'posts_per_page' => 5 ) );

<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>         
 (...)
<?endwhile?>

Aber wenn ich dies in meinen Widgets implementiere - scheint das Feld "post_type" nicht zu funktionieren. Egal, was ich als Post -Typ eingeben - es wird immer Beiträge anstelle von Portfolioelementen angezeigt. Auch wenn der Post -Typ nicht einmal existiert (und wie wir alle wissen, sollte er nichts anzeigen, wenn es keinen solchen Post -Typ gibt!).

Ich glaube, das Problem liegt außerhalb meines Widgets. Es gibt einen Blog -Abschnitt (Schleife von Loop.php, kein Code zu zeigen, denn es gibt nur "while" (Have_posts ()): the_post (); ")

bearbeiten

Ich kann mich irren, jede Codezeile von Loop.php gelöscht und mein Widget zeigt immer noch Beiträge.

Irgendwelche Ideen, wie man das behebt?

Bearbeiten #2

Ok, meine Website sieht genau wie jeder normale WordPress -Blog aus:

header.php
loop.php > widget area
footer.php

Es gibt fast keinen PHP -Code in Header und Fußzeile (zumindest keine Schleifen usw.).

Der Loop.php ist auch normal: normal:

 <?php if ( ! have_posts() ) : ?> 
    (...)
    <?php endif; ?> 

    <?php while ( have_posts() ) : the_post(); ?> 
    (...)
    <?php endwhile; ?>  

Tatsächlich ist das Widget auch nicht sehr einzigartig:

function myWidgetName_load_widgets() {
    register_widget( 'myWidgetName' );
}

class myWidgetName extends WP_Widget {

    function myWidgetName() {
(...)
}

function widget( $args, $instance ) {
        extract( $args );
        $title = apply_filters('widget_title', $instance['title'] );
        $number = $instance['number'];

        echo $before_widget;
        if ( $title )
            echo $before_title . $title . $after_title;
        if ( $number )
    echo "<ul>"; ?>          
        <?php 
     $loopWithSuperUniqueName = new WP_Query( array( 
        'post_type' => 'anything', /* and this doesn't work */   
        'posts_per_page' => 15 ) );
    ?>

     <?php while ( $loopWithSuperUniqueName->have_posts() ) : $loopWithSuperUniqueName->the_post(); ?>  
     <p><?php the_title(); ?></p> /* it always displays POSTS even if 'post_type' => 'alalaaolbadiobladaWhathever' */
     <?php endwhile; ?>  




    <?php echo "</ul>"; ?> 
        <?php
        echo $after_widget;
    }

function update( $new_instance, $old_instance ) {
(...)
}

 function form( $instance ) {  
(...)
}

etc.

Der Code des Widgets ist in Ordnung, weil ich ein paar ähnliche Widgets entwickelt habe und sie funktionieren.

Ich fange an zu denken, dass mit WordPress etwas nicht stimmt, nicht mit meinem Code.

War es hilfreich?

Lösung

Es klingt nach Ihrem Widget aus irgendeinem Grund auf die globale $ -Schleife. Dies könnte möglicherweise auf die Interna der Widget -Klasse oder auf die Störung anderer Plugins zurückzuführen sein, denke ich.

Versuchen Sie als erster Schritt, auf der sicheren Seite zu sein, einen anderen variablen Namen. Die globale Schleife wird als $ Loop bezeichnet. Wenn Sie einfach Ihre in $ myloop umbenennen, können Sie Verwirrungen zwischen global und lokal vermeiden.

Zweitens, wenn das Problem besteht, testen Sie Ihr Widget auf einer Seite "Seite" -Typ. Oder eine andere "Single" -Seite. Zeigt es jetzt nur noch eine einzelne Reihe?

Andere Tipps

Ich könnte dieses Problem mit wp_reset_query () lösen;

Zu Beginn des Widgets

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top