如何使用jQuery为WooCommerce指定类产品定时新增分类
问题核心原因
- 逻辑本质不符:你用jQuery给body加类属于前端临时修改DOM的操作,仅作用于当前用户的当前页面会话,刷新页面就会失效。而WooCommerce后台手动添加分类是写入数据库的持久化操作,会同步修改产品分类关联关系、分类归档页内容、全局产品过滤规则等所有分类相关逻辑,二者完全不是一个层面的实现,自然达不到相同效果。
- 代码存在潜在bug:你贴出的代码中
today变量没有提前定义,直接运行会抛出引用错误,如果你实际运行时能成功加类,说明你可能在其他未贴出的代码中声明了该变量,否则这段代码本身无法正常执行。 - 样式不生效附加原因:如果仅需要前端样式差异,没有修改产品实际分类归属的需求,要确认你主题/插件中
tax_occasioni类的CSS选择器优先级足够,比如原有样式写的是body.woocommerce.tax_qeeboo .product,你需要写成body.tax_qeeboo.tax_occasioni .product才能覆盖原有规则,不会出现加了类没效果的问题。
正确实现方案(与后台手动加分类效果完全一致)
要实现指定日期自动给所有qeeboo分类下的产品添加occasioni分类的持久化效果,需要用WordPress服务端钩子实现,把以下代码添加到你主题的functions.php文件或者自定义功能插件中即可:
// 自动给qeeboo分类产品添加occasioni分类 add_action('wp', 'auto_add_qeeboo_to_occasioni'); function auto_add_qeeboo_to_occasioni() { // 设定触发日期 $start_date = strtotime("2021-11-30 00:00:00"); $current_time = current_time('timestamp'); // 日期到达且未执行过更新才运行 if ($current_time > $start_date && !get_option('qeeboo_to_occasioni_finished')) { // 先获取目标分类ID,确认occasioni分类已提前创建 $target_cat = get_term_by('slug', 'occasioni', 'product_cat'); if (!$target_cat) return; $target_cat_id = $target_cat->term_id; // 获取所有qeeboo分类下的产品 $products = get_posts([ 'post_type' => 'product', 'posts_per_page' => -1, 'tax_query' => [ [ 'taxonomy' => 'product_cat', 'field' => 'slug', 'terms' => 'qeeboo' ] ], 'fields' => 'ids' // 只取ID提升性能 ]); // 批量给产品添加分类 foreach ($products as $product_id) { wp_set_object_terms($product_id, $target_cat_id, 'product_cat', true); } // 标记已执行,避免重复跑逻辑浪费性能 update_option('qeeboo_to_occasioni_finished', true); } }
注意:执行代码前请先备份网站数据库,确认你要添加的分类slug确实是
occasioni,代码运行一次后就会自动标记完成,不需要重复执行。
内容的提问来源于stack exchange,提问作者Miner
相关产品推荐
相关产品推荐

