Лучше ли использовать Query_posts, WP_QUERY или GET_POSTS для создания различных пользовательских циклов на странице?

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

  •  16-10-2019
  •  | 
  •  

Вопрос

Прямо сейчас я использую get_posts Чтобы получить типы публикаций Cusstom с помощью пользовательской таксономии, присвоенной для него для создания статического контента, подобного этому:

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

Что лучше в этом случае?

Чтобы использовать Query_posts, wp_query или get_posts?

enter image description here

Это было полезно?

Решение

Привет @Janochen:

Если у вас есть выбор, идти с WP_Query. Обе другие функции (query_posts() а также get_posts()) вызов WP_Query косвенно.

Первый предназначен для того, чтобы позволить вам изменить основной запрос после того, как стандартный запрос уже запустил, например, когда вы хотите второй цикл. Но query_posts() влияет на глобальные переменные и может иметь побочные эффекты. Если возможно, используйте WP_QUERY вместо этого, и ваш код будет более надежным.

Что касается get_posts(), это просто обертка вокруг WP_Query С некоторыми потенциально неожиданными значениями по умолчанию, так что вы можете также позвонить WP_Query напрямую и избегайте этих проблем.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с wordpress.stackexchange
scroll top