it-swarm.com.de

Bessere Möglichkeit zum Anzeigen von Beiträgen aus bestimmten Kategorien in einem Rasterlayout

Ich verwende den folgenden Code, um Posts aus einer bestimmten Kategorie in einem Rasterlayout auf meiner Homepage anzuzeigen. Es funktioniert genau so, wie ich es möchte, aber ich lese immer wieder, dass ich query_posts niemals verwenden sollte. Wie kann ich dieselben Ergebnisse erzielen, ohne query_posts zu verwenden?

Außerdem muss ich möglicherweise Posts aus zehn verschiedenen Kategorien auf der Startseite anzeigen - und zwar mit genau demselben Rasterlayout. Würde es Probleme verursachen, wenn ich den gesamten folgenden Code für jede Kategorie duplizieren würde, oder gibt es eine effizientere Möglichkeit, dies zu tun?

Jeder Rat wäre sehr dankbar - da Sie wahrscheinlich in der Lage sein werden, aus meinem Code und meinen Fragen herauszuarbeiten, bin ich ziemlich neu in der WordPress-Entwicklung :)

<?php
$counter = 1; //start counter
$grids = 3; //Grids per row
global $query_string; //Need this to make pagination work

/*Setting up our custom query (In here we are setting it to show 3 posts per page and eliminate all sticky posts) */
query_posts( array('posts_per_page'=>3, 'category_name'=>'Mobile') );

if(have_posts()) :  while(have_posts()) :  the_post(); 
?>

<?php
//Show the left hand side column
if($counter == 1 || $counter == 2) :
?>
            <div class="col-cat3">
                <div class="entry-featured"><?php x_featured_image(); ?></div>
                <div class="col-cat-pic"><?php echo get_avatar( get_the_author_meta('ID'), 40); ?></div>
                <div class="hero-info">
                <h3><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3>
                <p class="p-meta"><?php the_author_posts_link(); ?>  /  <?php the_time('m.d.y'); ?></p>
                </div>
            </div>
<?php
//Show the right hand side column
elseif($counter == $grids) :
?>
             <div class="col-cat3-last">
                <div class="entry-featured"><?php x_featured_image(); ?></div>
                <div class="col-cat-pic"><?php echo get_avatar( get_the_author_meta('ID'), 40); ?></div>
                <div class="hero-info">
                <h3><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3>
                <p class="p-meta"><?php the_author_posts_link(); ?>  /  <?php the_time('m.d.y'); ?></p>
                </div>
            </div>
<?php
$counter = 0;
endif;
?>
<?php
$counter++;
endwhile;
//Pagination can go here if you want it.
endif;
?>
1
Paul Dixon

Ich denke, der allgemeine Vorschlag ist, WP_Query anstelle von query_posts zu verwenden, da query_posts WP_query auf vereinfachte Weise verwendet und später Probleme verursachen kann. Also sicher checke die WP_Query Seite, speziell das Multiple Loops Beispiel : http://codex.wordpress.org/Class_Reference/WP_Query#Multiple_Loops

Der Code mit WP_Query würde also ungefähr so ​​aussehen:

<?php
$counter = 1; //start counter
$grids = 3; //Grids per row
global $query_string; //Need this to make pagination work

/*Setting up our custom query (In here we are setting it to show 3 posts per page and eliminate all sticky posts) */
$query1 = new WP_Query( array('posts_per_page'=>3, 'category_name'=>'Mobile') );

if( $query1->have_posts()) :  while( $query1->have_posts()) : $query1->the_post(); 

    if( $counter == $grids ) : 
        $counter = 0; // Reset counter ?>
        <div class="col-cat3-last">
    <?php else: ?>
        <div class="col-cat3">
    <?php endif; ?>

        <div class="entry-featured"><?php x_featured_image(); ?></div>
        <div class="col-cat-pic"><?php echo get_avatar( get_the_author_meta('ID'), 40); ?></div>
            <div class="hero-info">
                <h3><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3>
                <p class="p-meta"><?php the_author_posts_link(); ?>  /  <?php the_time('m.d.y'); ?></p>
            </div>
        </div>
<?php
$counter++;
endwhile;
//Pagination can go here if you want it.
endif;
wp_reset_postdata(); // Reset post_data after each loop
?>

Beachten Sie, dass derselbe $args in der WP_Query verwendet werden kann. Beachten Sie auch das Hinzufügen von $query1-> im Loop-Setup. Ändern Sie einfach $ query1 in $ query2, wenn Sie diesen Code kopieren und einfügen, und ändern Sie höchstwahrscheinlich den category_name in den Abfrage-Args entsprechend Ihrer Kategorie.

Ich habe auch repetierenden Code bereinigt, da es so aussah, als ob der einzige Unterschied das '-last' war, das der Wrapping-Div-Klasse hinzugefügt wurde. Anstatt zusätzlichen Code für zukünftige Aktualisierungen zu haben, können Sie diesen einfach verwenden.

Ich habe am Ende auch wp_reset_postdata(); hinzugefügt, um sicher zu gehen und die Post-Daten zu löschen/zurückzusetzen.

Lassen Sie mich wissen, wenn Sie Fragen oder Bedenken haben.

2
Sean Grant