¿Es una mejor práctica usar Query_Posts, WP_Query o get_posts para crear varios bucles personalizados dentro de una página?

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

  •  16-10-2019
  •  | 
  •  

Pregunta

Ahora mismo estoy usando get_posts Para recuperar los tipos de publicaciones de Cusstom con una taxonomía personalizada asignada para generar contenido estático como este:

<?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(); ?>

¿Qué es mejor práctica en este caso?

¿Usar Query_Posts, WP_Query o Get_Posts?

enter image description here

¿Fue útil?

Solución

Hola @Janochen:

Si tienes una opción ir con WP_Query. Ambas funciones (query_posts() y get_posts()) llamar WP_Query indirectamente.

El primero está diseñado para permitirle modificar la consulta principal después de que la consulta estándar ya se haya ejecutado, por ejemplo, cuando desea un segundo bucle. Pero query_posts() afecta las variables globales y puede tener efectos secundarios. Si es posible, use WP_Query en su lugar y su código será más robusto.

Como para get_posts(), es solo un envoltorio alrededor WP_Query con algunos valores predeterminados potencialmente inesperados, por lo que también podría llamar WP_Query directamente y evite esos problemas.

Licenciado bajo: CC-BY-SA con atribución
scroll top