php - 找到保存产品变化图像的函数-WooCommerce
问题描述
我正在尝试更新处理将图像上传到变体产品的功能![图像变体] https://i.imgur.com/reNn6x7.png
我认为处理它的代码是:
protected function set_variation_image( $variation, $image ) {
$attachment_id = isset( $image['id'] ) ? absint( $image['id'] ) : 0;
if ( 0 === $attachment_id && isset( $image['src'] ) ) {
$upload = wc_rest_upload_image_from_url( esc_url_raw( $image['src'] ) );
if ( is_wp_error( $upload ) ) {
if ( ! apply_filters( 'woocommerce_rest_suppress_image_upload_error', false, $upload, $variation->get_id(), array( $image ) ) ) {
throw new WC_REST_Exception( 'woocommerce_variation_image_upload_error', $upload->get_error_message(), 400 );
}
}
$attachment_id = wc_rest_set_uploaded_image_as_attachment( $upload, $variation->get_id() );
}
if ( ! wp_attachment_is_image( $attachment_id ) ) {
/* translators: %s: attachment ID */
throw new WC_REST_Exception( 'woocommerce_variation_invalid_image_id', sprintf( __( '#%s is an invalid image ID.', 'woocommerce' ), $attachment_id ), 400 );
}
$variation->set_image_id( $attachment_id );
// Set the image alt if present.
if ( ! empty( $image['alt'] ) ) {
update_post_meta( $attachment_id, '_wp_attachment_image_alt', wc_clean( $image['alt'] ) );
}
// Set the image name if present.
if ( ! empty( $image['name'] ) ) {
wp_update_post(
array(
'ID' => $attachment_id,
'post_title' => $image['name'],
)
);
}
return $variation;
} `
在 - 的里面class-wc-rest-product-variations-controller.php
但此功能的任何修改都不会改变文件上传的方式。
这个想法是上传图像并将相同的变体图像应用于每个可用的变体,但找不到将图像保存到产品的功能。
在itzmekhokan回复后@edit
我创建了一个向 woocommerce_save_product_variation 添加操作的插件
add_action('woocommerce_save_product_variation', 'salvarfoto',10,2);
function salvarfoto($variation_id,$i){
$variation = new WC_Product_Variation($variation_id);
$produto_pai =wc_get_product( $variation->get_parent_id() );
foreach( $produto_pai->get_children() as $variation_values ){
// $variation_id = $variation_values['variation_id']; // variation id
$product = new WC_Product_Variation( $variation_values );
if( $product->get_attribute( 'pa_cor' ) == $variation->get_attribute('pa_cor'))
{
$id_img = $variation->get_image_id();
$product->set_image_id($id_img);
}
$product->save();
}
}
此代码将相同的 image_id 应用于具有相同颜色属性的所有变体
解决方案
它WC_Meta_Box_Product_Data::save_variations( $post_id, $post )
在文件class-wc-meta-box-product-data.php
中。
和 -
$errors = $variation->set_props(
array(
'image_id' => isset( $_POST['upload_image_id'][ $i ] ) ? wc_clean( wp_unslash( $_POST['upload_image_id'][ $i ] ) ) : null,
)
);
image_id
基本上存储每个变体图像ID。首先检查功能,然后我认为您可以使用此do_action( 'woocommerce_save_product_variation', $variation_id, $i );
挂钩进行修改。
推荐阅读
- php - 从 url 上传文件
- python - 检查数组中是否至少有 3 个相等的元素
- powershell - Powershell / windows 10:如何计算文件夹内的文件?
- android - RecyclerView 无法加载横幅和数据列表项的图像
- .htaccess - .htaccess 重定向子文件夹和所有子文件夹到父文件夹
- r - 将操作按钮重置为 NULL
- android - LiveData 在从后台弹出后停用 Fragment 中的观察者
- php - 共享主机上的 PHP MongoDB 驱动程序未连接到地图集
- android - ViewPager 点击 NextPage
- python - 在 Python/pandas 中合并不同长度的数据框