Est-il préférable à la pratique query_posts d'utilisation, WP_Query ou get_posts pour créer différentes boucles personnalisées dans une page?

wordpress.stackexchange https://wordpress.stackexchange.com/questions/8028

  •  16-10-2019
  •  | 
  •  

Question

En ce moment, j'utilise get_posts pour récupérer les types de messages de cusstom avec une taxonomie personnalisée qui lui est attribué afin de générer du contenu statique comme ceci:

<?php
/**
 * Template Name: Front Page
 * @package WordPress
 * @subpackage Prominent
 * @since Prominent 1.0
 */
get_header(); ?>
<div class="shadow-top">
    <!-- Shadow at the top of the slider -->
</div>
<div id="intro">
    <div class="container">
        <div id="slider-wrapper">
            <div id="slider">
            <?php // Create custom loop ?>
            <?php $custom_posts = get_posts('post_type=page_content&page_sections=Slider (Front Page)'); ?>
            <?php foreach( $custom_posts as $post ) : setup_postdata( $post ); ?>
                <p><?php the_content(); ?></p>
            <?php endforeach; ?>
            <?php wp_reset_query(); ?>
            </div>
            <div class="shadow-slider">
                <!-- Shadow at the bottom of the slider -->
            </div>
        </div><!-- #slider-wrapper -->
    </div><!-- .container -->
</div><!-- #featured -->
<div class="shadow-bottom">
    <!-- Shadow at the bottom of the slider -->
</div>
<div id="tagline">
    <div class="container">
        <?php
        $page_id = $post->ID; // 123 should be replaced with a specific Page's id from your site, which you can find by mousing over the link to edit that Page on the Manage Pages admin page. The id will be embedded in the query string of the URL, e.g. page.php?action=edit&post=123.
        $page_data = get_page( $page_id ); // You must pass in a variable to the get_page function. If you pass in a value (e.g. get_page ( 123 ); ), Wordpress will generate an error.

        $content = apply_filters('the_content', $page_data->post_content); // Get Content and retain Wordpress filters such as paragraph tags. Origin from: http://wordpress.org/support/topic/get_pagepost-and-no-paragraphs-problem
        $title = $page_data->post_title; // Get title
        ?>
        <div class="content0">
            <h2><?php echo $content; // Output Content ?></h2>
        </div>
    </div><!-- .container -->
</div><!-- #content-bottom -->
<div id="content">
    <div class="container">
        <div class="mainbar">
            <?php // Create custom loop
            $custom_posts = get_posts('post_type=page_content&page_sections=Content (Front Page)'); ?>
            <?php foreach( $custom_posts as $post ) : setup_postdata( $post ); ?>
                <div class="content-block">
                    <h2><?php the_title(); ?></h2>
                    <p><?php the_content(); ?></p>
                </div><!-- .content-block -->
            <?php endforeach; ?>
            <?php wp_reset_query(); ?>
        </div><!-- #mainbar -->
    </div><!-- .container -->
</div><!-- #content-bottom -->
<?php get_footer(); ?>

Quelle est une meilleure pratique dans ce cas?

Pour utiliser query_posts, WP_Query ou get_posts?

entrer image description ici

Était-ce utile?

La solution

Salut @janoChen:

Si vous avez le choix, aller avec WP_Query. Les deux autres fonctions (query_posts() et get_posts()) appel WP_Query indirectement.

L'ancien est conçu pour vous permettre de modifier la requête principale après la requête standard a déjà été exécuté, par exemple lorsque vous voulez une deuxième boucle. Mais query_posts() affecte les variables globales et peut avoir des effets secondaires. Si possible, utilisez WP_Query à la place et votre code sera plus robuste.

En ce qui concerne get_posts(), il est juste un wrapper autour WP_Query avec quelques défauts potentiellement inattendues de sorte que vous pourriez aussi bien appeler WP_Query directement et éviter ces problèmes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top