获取每个类别的最后5种产品

时间:2021-09-17 作者:Răuțu Denis

如何为每个产品类别选择最后5种产品?我试着从每个类别中选择最后5种产品,并添加标签;新建;。我看到这是WP\\u查询,但我没有找到有帮助的参数。我有这个代码,可以很好地添加标记;“新建”;对于超过30天的产品。提前谢谢你,我真的很感激。

function display_new_loop_woocommerce() {
global $product;

$datetime_now = new WC_DateTime();
$timestamp_now = $datetime_now->getTimestamp();


$args = array(
\'post_type\' => \'product\', // your product post type
\'posts_per_page\' => - 1,
);

$posts = get_posts($args);

foreach ($posts as $post):
setup_postdata($post);

$product = new WC_Product($post->ID);

$datetime_created = $product->get_date_created();
$timestamp_created = $datetime_created->getTimestamp();

$time_delta = $timestamp_now - $timestamp_created; 
$sixty_days = 30 * 24 * 60 * 60; 


if ( $time_delta < $sixty_days ) {
    if( ! has_term( \'\', \'product_tag\', $post->ID ) ) :
        wp_set_object_terms($post->ID, array(\'nou\'), \'product_tag\');
    endif;   
} else {
    if( has_term( \'\', \'product_tag\', $post->ID ) ) :
        wp_remove_object_terms($post->ID, array(\'nou\'), \'product_tag\');
    endif;   
}

wp_reset_postdata();
endforeach;
}

1 个回复
最合适的回答,由SO网友:Antonio 整理而成

我想你必须有办法做到这一点。你选择哪一个取决于你的网站上有多少产品和多少类别。

如果你有大量的产品,但没有那么多的类别,那么最好的方法可能是先获得类别:

$product_categories = get_terms( [\'taxonomy\' => \'product_cat\', \'hide_empty\' => false] );

然后通过对每个类别的新查询对其进行迭代,以获取每个类别的最新产品。

另一方面,如果您有许多类别,这将导致执行许多查询。

在这种情况下,您可以考虑按现有方式获取所有产品,对它们进行迭代,并针对每个帖子:

获取所有类别ID:$product->get_category_ids()它将是这样的:

[
  5 => [
    \'123456789\' => $product1
    \'123456877\' => $product2
    ...
  ],
  10 => [
    \'123456888\' => $product3
    ...
  ]
]
然后可以按第二组键对数组进行排序,并获得每个嵌套数组的前5个元素。

<小时/>NOTE: 在任何情况下,无论您选择什么,如果您有大量的产品和/或类别,这都不是一个快速操作,因此我建议您使用WP Transients 要存储检索到的ID,并将其保存到添加新产品之前,请删除现有产品或更改现有产品的类别(并且可能在固定时间后失效,只是为了确保这一点)。

相关推荐

WordPress摘录-如何使用unctions.php删除第一个链接

我刚刚将一个博客导入Wordpress,所有内容都以以下内容开头:<a href="itunes.com">Listen on iTunes</a> 然后是段落内容,因此所有节选都显示为“;收听iTunes内容摘录"E;我尝试了这里的一些自定义函数,但似乎没有一个能起到作用。在不必移动iTunes链接的情况下删除Listen on iTunes文本的最佳方法是什么?例如,我试过这个。。。没有运气。。。 function custom_ex