【发布时间】:2016-10-11 23:53:41
【问题描述】:
我正在尝试从特定的 WooCommerce 类别中获取最新的产品 ID。出于某种原因,在每次页面加载时,我都会得到不同的产品 ID,而不是最新的。
这是 WP_Query 参数:
array(
'post_type' => 'product',
'posts_per_page' => 5,
'tax_query' => array(
array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => 'a-product-category'
)
),
'orderby' => 'date',
'order' => 'ASC'
)
这会生成以下 SQL 查询:
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
LEFT JOIN wp_term_relationships
ON (
wp_posts.ID = wp_term_relationships.object_id
)
WHERE 1=1
AND (
wp_term_relationships.term_taxonomy_id IN (259,260,262)
)
AND wp_posts.post_type = 'product'
AND (
wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private'
)
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date ASC
LIMIT 0, 5
就像我说的,返回的帖子 ID 总是有些不同(尽管它们来自正确的类别)。我的理解是,这个查询的正确行为是它应该返回指定类别的五个最新帖子。
我直接在 SQL 服务器上执行查询以排除任何 WordPress 或插件问题,但仍然得到随机的帖子 ID。
如果我删除 tax_query(删除 wp_term_relationship 相关的 SQL 命令)或将 posts_per_page 设置为 -1(删除 LIMIT 0、5),则帖子 ID 的顺序似乎正确。
但是,这可以正常工作,因为我认为它应该可以在我的开发服务器上工作。这发生在生产服务器上(使用 WPengine 作为托管服务提供商和 MySQL 5.6.32)。
欢迎任何建议,谢谢!
【问题讨论】: