首页 > 解决方案 > 通过不在 WordPress 帖子循环中工作来订购

问题描述

我希望我的产品按特定项目订购,但是当我添加订单查询时,产品不再显示在页面上。

这是我正在使用的查询:

<?php query_posts($query_string . '&orderby=title&order=ASC');?>
<?php if ( have_posts() ) :  while ( have_posts() ) : the_post(); global $product; ?>
<div class="col-md-4 mt-5 mb-5">
    <a href="<?php echo get_permalink( $loop->post->ID ) ?>" class="d-block w-100">
        <div class="image-wrapper">
            <img src="<?php the_post_thumbnail_url(); ?>" class="img-fluid head-image d-block mx-auto">
            <?php if( $product->is_on_sale() ) { ?>
            <div class="image-content">
                <div class="sale">
                    <?php get_template_part('template-parts/part', 'sale'); ?>
                </div>
            </div>
            <?php } ?>
        </div>
    </a>
</div>
<?php endwhile; else: endif; ?>

当我删除第一行时<?php query_posts($query_string . '&orderby=title&order=ASC');?>,产品显示但未订购。

有谁知道出了什么问题?

标签: phpwordpress

解决方案


在 stackexchange 上有一篇关于 wp_query 与 query_posts 的精彩文章(https://wordpress.stackexchange.com/questions/1753/when-should-you-use-wp-query-vs-query-posts-vs-get-posts)。

也许你可以考虑

$args = array( /* your args: refer to wp_query() for requirements */
$query = new WP_Query($args);

抱歉,我正在使用手机,无法提供更好的示例。但是 wp_query 是一个更受欢迎的选项,如前所述:

query_posts() 过于简单化,并且通过将其替换为查询的新实例来修改页面的主查询是一种有问题的方法。它效率低下(重新运行 SQL 查询)并且在某些情况下会彻底失败(尤其是在处理帖子分页时)。为此,任何现代 WP 代码都应该使用更可靠的方法,例如使用 pre_get_posts 挂钩。TL;DR 永远不要使用 query_posts()。

get_posts() 在用法上非常相似并且接受相同的参数(有一些细微差别,比如不同的默认值),但返回一个帖子数组,不修改全局变量并且在任何地方都可以安全使用。

WP_Query 是在幕后为两者提供支持的类,但您也可以创建和使用您自己的实例。稍微复杂一点,限制更少,在任何地方都可以安全使用。


推荐阅读