0

我们正在建一家服装店。将上传的产品可能具有来自不同国家/地区的标签尺寸,因此我们有两种尺寸分类法:product_size 和 product_size_uk。

我正在尝试根据产品保存/更新时的国际尺寸设置英国尺寸,并运行开关以将变量设置为英国尺寸分类的 id 并使用 wp_set_object_terms。但这不起作用:

add_action( 'save_post', 'save_uk_size' );
function save_uk_size( $post_id ) {
   if ( $post->post_type == 'product' ) {

        $post = get_post($post_id);
        $terms = wp_get_post_terms( $post->ID, 'product_size', array( 'fields' => 'all' ) );
            if ( $terms ) {
                $prod_size_int = $terms[0]->slug;
            }

            switch ($prod_size_int) {
                ...
                case "FR-36":
                  $prod_size_uk = 805;
                  break;
                case "FR-38":
                  $prod_size_uk = 806;
                  break;
                ...
                }

     wp_set_object_terms($post_id, $prod_size_uk, 'product_size_uk');
   }

}

谁能引导我朝着正确的方向前进?谢谢!

4

1 回答 1

1
  1. 首先你需要安装 Advanced Custom Fields 插件

  2. 然后对于分类 product_size,我们创建分类字段 (product_size_uk)。

现在,在管理面板的分类 product_size 页面中有一个字段,我们可以选择哪个 product_size_uk 对应于该分类。

3.然后我们必须为所有尺寸选择product_size_uk匹配。

然后这段代码

add_action( 'save_post_product', 'product_save_new_term' );
function product_save_new_term($post_id) {
    
        remove_action( 'save_post_product', 'product_save_new_term' );    

        $terms = wp_get_object_terms( $post_id, 'product_size' );
        
        $term_id = $terms[0]->term_id;
        
        if($term_id != "") {        

        $key_for_field = 'product_size_' . $term_id;
        
        $product_size_uk_value = get_field( 'product_size_uk', $key_for_field );
        
        wp_set_object_terms($post_id, $product_size_uk_value, 'product_size_uk');
        
        clean_post_cache( $post_id );
        
        } else {
            
        wp_delete_object_term_relationships( $post_id, 'product_size_uk' );
        
        }
        
        
        add_action( 'save_post_product', 'product_save_new_term' );
}

或者,如果您不想在管理面板中控制尺寸匹配,那么您可以更轻松地在代码中编写所有内容。

add_action( 'save_post_product', 'product_save_new_term' );
function product_save_new_term($post_id) {

       $data_array = array(
       "product_size_term_id" => "product_size_uk_term_id",
       "product_size_term_id2" => "product_size_uk_term_id2",
       "product_size_term_id3" => "product_size_uk_term_id3",
       );
       
        remove_action( 'save_post_product', 'product_save_new_term' );


        $terms = wp_get_object_terms( $post_id, 'product_size' );
        
        $term_id = $terms[0]->term_id;
        
        if($term_id != "") {    

        
        
        $product_size_uk_value = $data_array[$term_id];
        if($product_size_uk_value !="") {
        wp_set_object_terms($post_id, $product_size_uk_value, 'product_size_uk');
        }
        clean_post_cache( $post_id );
        
        } else {
            
        wp_delete_object_term_relationships( $post_id, 'product_size_uk' );
        
        }
        
        
        add_action( 'save_post_product', 'product_save_new_term' );
}
于 2021-09-16T01:04:12.843 回答