
在电子商务网站中,动态展示“新品”是吸引顾客、提升销量的有效策略。然而,手动管理商品的“新品”状态既耗时又容易出错。本教程旨在提供一个自动化解决方案,通过编写自定义php代码,让woocommerce能够根据商品的创建日期自动将其添加到特定的“新品”分类,并在达到设定的时间限制后(例如60天)自动从该分类中移除。
该功能的实现主要依赖于以下几个核心步骤:
以下是实现此功能的完整代码和详细说明。建议将此代码添加到您当前活动主题的 functions.php 文件中,或者更好地,封装到一个自定义插件中。
首先,我们需要使用WP_Query来获取WooCommerce中的所有产品。WP_Query是WordPress查询文章(包括自定义文章类型如产品)的标准方式。
$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(); // 恢复全局文章数据
}获取产品创建日期并计算与当前日期的天数差是关键一步。WooCommerce提供了WC_Product对象,通过get_date_created()方法可以获取产品的创建日期。为了准确计算,我们需要处理时区并确保日期对象的一致性。
$product = wc_get_product( get_the_ID() ); // 获取当前循环中的产品对象
$datetime = $product->get_date_created(); // 获取产品创建日期 (WC_DateTime 对象)
if ( $datetime ) { // 确保日期对象存在
$timezone = $datetime->getTimezone(); // 获取产品创建日期所在的时区
$now_time = new WC_DateTime(); // 创建当前时间的 WC_DateTime 对象
$now_time->setTimezone($timezone); // 将当前时间对象设置为与产品创建日期相同的时区
// 计算时间戳差值(秒)
$timestamp_diff = $now_time->getTimestamp() - $datetime->getTimestamp();
// 将秒数差值转换为天数
// 这里使用一个辅助函数 timestamp_to_array 来获取天数
$data = timestamp_to_array( $timestamp_diff );
$days = (int)$data['d']; // 确保天数是整数类型
} else {
$days = 9999; // 如果没有创建日期,则默认设置为一个大值,确保不被视为新品
}这里我们引入了一个辅助函数 timestamp_to_array 来将秒数差值转换为天、小时、分钟和秒的数组。虽然我们只需要天数,但这个函数提供了一个完整的转换示例。
/**
* 将时间戳差值转换为天、小时、分钟、秒的数组
*
* @param int $timestamp 时间戳差值(秒)
* @return array 包含 'd', 'h', 'm', 's' 的数组
*/
function timestamp_to_array( $timestamp ) {
$d = floor($timestamp/86400);
$_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);
}根据计算出的天数,我们使用wp_set_object_terms和wp_remove_object_terms函数来管理产品的分类。
$new_in_category_id = 40; // 请替换为您的“新品”分类ID
if ( $days < 60 ) { // 如果天数小于60,则认为是新品
// 将产品添加到“新品”分类,并保留现有分类
wp_set_object_terms( get_the_ID(), $new_in_category_id, 'product_cat', true );
} else {
// 如果天数大于等于60,则从“新品”分类中移除
wp_remove_object_terms( get_the_ID(), $new_in_category_id, 'product_cat' );
}如何找到您的“新品”分类ID:
将上述所有逻辑封装在一个函数中,并将其挂载到WordPress的init动作钩子上。init钩子在WordPress核心加载完毕后、用户请求被路由之前触发,是执行此类全局操作的理想时机。
/**
* 根据产品创建日期自动设置/移除“新品”分类
*/
function add_category_to_product_for_certain_days(){
$new_in_category_id = 40; // <-- 请将此ID替换为您的“新品”分类ID
$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();
$product = wc_get_product( get_the_ID() );
$datetime = $product->get_date_created();
if ( $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 = (int)$data['d']; // 确保天数是整数
} else {
$days = 9999; // 如果没有创建日期,则设置为一个大值,确保不被视为新品
}
// 根据天数判断并设置/移除分类
if ( $days < 60 ) { // 60天内视为新品
wp_set_object_terms( get_the_ID(), $new_in_category_id, 'product_cat', true );
} else {
wp_remove_object_terms( get_the_ID(), $new_in_category_id, 'product_cat' );
}
}
wp_reset_postdata(); // 恢复全局文章数据
}
}
// 挂载函数到 'init' 动作钩子
add_action( 'init', 'add_category_to_product_for_certain_days', 10, 0 );
/**
* 辅助函数:将时间戳差值转换为天、小时、分钟、秒的数组
* (此函数应与主函数放在同一文件中)
*
* @param int $timestamp 时间戳差值(秒)
* @return array 包含 'd', 'h', 'm', 's' 的数组
*/
function timestamp_to_array( $timestamp ) {
$d = floor($timestamp/86400);
$_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);
}通过上述代码和步骤,您可以为WooCommerce商店实现一个高效的自动化“新品”分类管理系统。这不仅能节省手动操作的时间,还能确保“新品”展示的准确性和及时性,从而提升用户体验和销售转化率。在实施时,请务必根据您的商店规模和性能需求,选择最合适的执行频率和方式(例如 init 钩子或定时任务)。
以上就是WooCommerce 产品自动分类:根据商品创建日期动态管理“新品”标签的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号