在电商运营中,“新品上架”是一个常见的营销策略,旨在吸引顾客关注最新商品。然而,手动为大量产品添加或移除“新品”分类,尤其是在商品数量庞大且更新频繁的情况下,会变得非常耗时且容易出错。本文将指导您如何通过编写自定义代码,实现 woocommerce 产品发布后在指定天数内自动归类到“新品”分类,并在超过期限后自动移除,从而极大地提高运营效率。
实现这一功能主要依赖于以下几个核心概念:
我们将通过以下步骤构建自动分类功能:
首先,我们需要将我们的自定义函数挂载到 WordPress 的 init 钩子上。这意味着每当页面加载时,我们的函数都会被执行,从而检查并更新产品分类。
add_action( 'init', 'add_category_to_product_for_certain_days', 10, 1 ); function add_category_to_product_for_certain_days(){ // 我们的主要逻辑将在这里实现 }
在 add_category_to_product_for_certain_days 函数内部,我们需要使用 WP_Query 来获取所有产品。为了确保所有产品都被检查,我们将 posts_per_page 参数设置为 -1。
$args = array( 'post_type' => 'product', 'posts_per_page' => -1 // 获取所有产品 ); $products = new WP_Query( $args ); if ( $products->have_posts() ) { while ( $products->have_posts() ) { $products->the_post(); // 对每个产品的操作将在这里进行 } wp_reset_postdata(); // 重置查询后的全局文章数据 }
对于每个产品,我们需要获取其发布日期并计算距离当前日期已经过去了多少天。这里我们将使用 wc_get_product() 获取产品对象,并利用 WC_DateTime 处理日期和时区。
$product = wc_get_product( get_the_ID() ); // 获取当前产品对象 $datetime = $product->get_date_created(); // 获取产品创建日期 (WC_DateTime 对象) // 确保当前时间与产品创建时间在同一时区,以避免计算错误 $timezone = $datetime->getTimezone(); $now_time = new WC_DateTime(); $now_time->setTimezone($timezone); // 计算时间戳差异(秒) $timestamp_diff = $now_time->getTimestamp() - $datetime->getTimestamp(); // 将秒数转换为天数 // 这里使用一个辅助函数 timestamp_to_array 来将时间戳差转换为天、小时、分钟、秒的数组 $data = timestamp_to_array( $timestamp_diff ); $days = $data['d']; // 获取天数
为了将时间戳差异转换为天数,我们需要一个辅助函数 timestamp_to_array。这个函数可以将总秒数分解为天、小时、分钟和秒。
function timestamp_to_array( $timestamp ) { $d = floor($timestamp/86400); // 86400 秒 = 1 天 $_d = ($d < 10 ? '0' : '').$d; $h = floor(($timestamp-$d*86400)/3600); $_h = ($h < 10 ? '0' : '').$h; $m = floor(($timestamp-($d*86400+$h*3600))/60); $_m = ($m < 10 ? '0' : '').$m; $s = $timestamp-($d*86400+$h*3600+$m*60); $_s = ($s < 10 ? '0' : '').$s; return array('d' => $_d, 'h' => $_h, 'm' => $_m, 's' => $_s); }
最后,根据计算出的天数,我们判断产品是否在“新品”期限内(例如,60天)。如果在期限内,则将其添加到“新品”分类;如果超过期限,则将其从“新品”分类中移除。
// 如果天数小于60,则添加到“新品”分类 if ( $days < 60 ) { // 参数说明:文章ID, 分类ID或名称数组, 分类法名称, 是否追加 (true表示追加,false表示覆盖) wp_set_object_terms( get_the_ID(), 40, 'product_cat', true ); } else { // 如果天数大于等于60,则从“新品”分类中移除 wp_remove_object_terms( get_the_ID(), 40, 'product_cat' ); }
注意:代码中的 40 是“新品”分类的ID。您需要将其替换为您实际的“新品”分类ID。获取分类ID的方法通常是在WordPress后台编辑分类时,查看浏览器地址栏中的 tag_ID 参数。
将以下所有代码添加到您的主题的 functions.php 文件中,或者更好地是创建一个自定义插件来管理它。
'product', 'posts_per_page' => -1, // 获取所有产品 'fields' => 'ids' // 只获取ID,提高性能 ); $product_ids = new WP_Query( $args ); if ( $product_ids->have_posts() ) { while ( $product_ids->have_posts() ) { $product_ids->the_post(); $product_id = get_the_ID(); // 获取当前产品ID $product = wc_get_product( $product_id ); // 获取产品对象 // 检查产品是否有效且有创建日期 if ( ! $product || ! $product->get_date_created() ) { continue; // 跳过无效产品 } $datetime = $product->get_date_created(); // 获取产品创建日期 (WC_DateTime 对象) // 确保当前时间与产品创建时间在同一时区,以避免计算错误 $timezone = $datetime->getTimezone(); $now_time = new WC_DateTime(); $now_time->setTimezone($timezone); // 计算时间戳差异(秒) $timestamp_diff = $now_time->getTimestamp() - $datetime->getTimestamp(); // 将秒数转换为天数 $data = timestamp_to_array( $timestamp_diff ); $days = intval($data['d']); // 获取天数,并确保为整数 // 定义“新品”分类的ID。请将此处的 40 替换为您实际的分类ID。 $new_in_category_id = 40; // 定义“新品”期限(天) $new_in_period_days = 60; // 如果产品发布天数小于期限,则添加到“新品”分类 if ( $days < $new_in_period_days ) { // 第四个参数 true 表示追加分类,而不是覆盖 wp_set_object_terms( $product_id, $new_in_category_id, 'product_cat', true ); } else { // 如果产品发布天数大于等于期限,则从“新品”分类中移除 wp_remove_object_terms( $product_id, $new_in_category_id, 'product_cat' ); } } wp_reset_postdata(); // 重置查询后的全局文章数据 } } /** * 辅助函数:将时间戳差异转换为天、小时、分钟、秒的数组 * * @param int $timestamp 时间戳差异(秒) * @return array 包含 'd', 'h', 'm', 's' 的数组 */ function timestamp_to_array( $timestamp ) { $d = floor($timestamp/86400); // 86400 秒 = 1 天 $_d = ($d < 10 ? '0' : '').$d; $h = floor(($timestamp-$d*86400)/3600); $_h = ($h < 10 ? '0' : '').$h; $m = floor(($timestamp-($d*86400+$h*3600))/60); $_m = ($m < 10 ? '0' : '').$m; $s = $timestamp-($d*86400+$h*3600+$m*60); $_s = ($s < 10 ? '0' : '').$s; return array('d' => $_d, 'h' => $_h, 'm' => $_m, 's' => $_s); }
分类 ID 的获取与设置:
性能考量与优化:
时区处理:
错误处理与日志:
通过本教程,您已经学会了如何利用 WordPress 和 WooCommerce 的强大功能,实现产品“新品上架”分类的自动化管理。这不仅能节省大量手动操作的时间,还能确保您的“新品”分类始终保持最新和准确。根据您的网站规模和需求,选择合适的执行频率(实时或定时任务)是确保系统高效运行的关键。
以上就是WooCommerce 产品自动“新品上架”分类管理教程:基于发布日期动态调整的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号