在过去的两天里,我一直在试图找到解决这个小问题的办法。我想通过编程更改某些产品的类别,到目前为止,我有这个
这似乎很符合逻辑,例如前几行
如果它是一个产品,并且它在DivingSuite类别中,则将类别更改为ID为108的类别,
但这根本不起作用,我太迷茫了,有什么想法我可能忽略了?
add_action( \'publish_product\', \'update_terms\' );
function update_terms($post_id) {
$post = get_post( $post_id );
if ( is_product() && has_term( \'divingsuits\', \'product_cat\' ) ) {
// TEST 1
$categories = array(108);
wp_set_object_terms( $post_id, $categories , \'product_cat\', false );
} elseif ( is_product() && has_term( \'elektro\', \'product_cat\' ) ) {
// TEST 2
$categories = array(78);
wp_set_object_terms( $post_id, $categories , \'product_cat\', false );
} else {
// TEST 3
$categories = array(115);
wp_set_object_terms( $post_id, $categories , \'product_cat\', false );
}}
SO网友:Steve82
此处的问题可能是“publish\\u product”操作未启动-它仅在您首次创建产品时运行,或在草稿或待审核中将产品状态设置为“publish”时运行。
请注意,wp\\u set\\u object\\u terms将覆盖任何其他现有类别数据,最后一个参数设置为false,在您的代码中,这些产品将只得到一个新类别。
既然你只是在把一个类别换成另一个类别,那么你为什么不给现有的类别起新的名字和名称呢?
您也可以通过批量编辑功能完成此操作-在屏幕选项下,您可以将视图设置为一次显示500个产品,并且仍然可以执行正常操作(取决于您的设置,可能会很慢,但您仍然可以在20分钟内完成10000多个产品)。
最后,仅供将来参考,所有$类别变量都只是单值(整数),因此不需要array()。