Running multiple WP_Query

时间:2019-10-14 作者:Pedro Ferreira

我正在尝试在我的主主页中运行多个wp\\U查询。。

这是一种好的做法吗?

$argsPort= array(
    \'posts_per_page\'   => 6,
    \'category_name\'    => \'portefolio\',
    \'suppress_filters\' => true,
);
$wqPort = new WP_Query($argsPort);

$argsServices = array(
    \'posts_per_page\'   => 6,
    \'category_name\'    => \'servicos\',
    \'suppress_filters\' => true,
);
$wqServices = new WP_Query($argsServices);

$argsClients= array(
    \'posts_per_page\'   => 3,
    \'category_name\'    => \'clientes\',
    \'suppress_filters\' => true,
);
$wqClients = new WP_Query($argsClients);

$argsBlog= array(
    \'posts_per_page\'   => 3,
    \'category_name\'    => \'blogue\',
    \'suppress_filters\' => true,
);
$wqBlog = new WP_Query($argsBlog);
我已经在使用两个循环,但其中只有一个有效,另一个不返回任何东西,它们都是相同的,但有一个使用$wqPort 另一个使用$wqBlog, 只有wqLog工作

  <?php foreach ($wqPort as $projeto) : setup_postdata( $projeto );?>
                <li class="glide__slide">
                <div class="card">
            <a href="<?php the_permalink(); ?>">

                <?php if(has_post_thumbnail( ))  : ?>
                <div class="card__image display--flex"
                    style="background-image: url(\'<?php echo wp_get_attachment_url( get_post_thumbnail_id( $post->ID ) ); ?>\');">
                    <!--imagem -->

                </div> <!-- imagem -->
                <?php else : ?>
                <div class="card__image__none">
                </div>
                <?php endif;?>
                <!--  -->
                <div class="card__container">
                    <p class="card__container__subtitle">
                        <?php the_tags(\'\', \', \', \'<br />\'); ?>
                    </p>

                    <h2 class="card__container__title">
                        <a href="<?php the_permalink(); ?>">
                            <?php the_title(  ); ?>
                        </a>

                    </h2>

                </div>
            </a>
        </div>
                </li>
                <?php endforeach;?>
                <?php wp_reset_query(); ?>

1 个回复
SO网友:Tom J Nowell

您的问题在于:

foreach ($wqPort as $projeto)
$wqPort 是类型的对象WP_Query, 不是数组。如果查看PHP错误日志,应该会看到这些行的警告和通知

相反,请使用标准的post循环:

$q = new WP_Query( [ .. args here ... ] );
if ( $q->have_posts() ) {
    while( $q->have_posts() ){
        $q->the_post();
        // .. do things
    }
    wp_reset_postdata();
} else {
    // no posts found
}
这就是标准WP\\U查询post循环的样子

其他注意事项:

避免将suppress\\u filters设置为true,这将阻止缓存机制工作,以及任何插件调整查询,从而导致性能下降wp_rest_query, 它用于query_posts. 使用wp_reset_postdata 相反,不要在同一行上涂抹多个内容缩进您的代码,这将防止常见错误,并使阅读更容易如果您有两个PHP块之间没有任何内容,不要关闭并重新打开它们,只需一个大块即可。E、 g.这:<?php echo 1; ?><?php echo 2;?> 成为:<?php echo 1; echo 2; ?>

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post