php 在Woocommerce中将自定义属性值设置为特色图像

ix0qys7i  于 2023-08-02  发布在  PHP
关注(0)|答案(2)|浏览(137)

对于产品,我设置了几个自定义属性,其中有images,它可以有多个由|分隔的图像。你可以看看Here。产品通过woocommerce API插入。但问题是负责在前端显示图像的特色图像没有填满。因此,我需要从images属性中获取第一张图像,并将其设置为特色图像。由于它们已经是现有的产品,所以我尝试通过下面的代码实现,并将其添加到我的functions.php中。但是没有用

function update_existing_products_featured_image() {

    $attribute_name = 'images';

    // Get all published simple products
    $args = array(
        'post_type'      => 'product',
        'posts_per_page' => -1,
        'fields'         => 'ids',
        'post_status'    => 'publish',
    );

    $product_ids = get_posts($args);

    foreach ($product_ids as $product_id) {
        // Get the custom attribute value for the product
        $attribute_value = get_post_meta($product_id, '_' . $attribute_name, true);

        // Check if the attribute value contains '|' to separate images
        if ($attribute_value && strpos($attribute_value, '|') !== false) {
            // Explode the attribute value to get an array of image URLs
            $image_urls = explode('|', $attribute_value);

            // Get the first image URL from the array
            $first_image_url = trim($image_urls[0]);

            // Check if the first image URL is valid
            if (filter_var($first_image_url, FILTER_VALIDATE_URL)) {
                // Download the image and set it as the featured image
                $image_id = media_sideload_image($first_image_url, $product_id, '', 'id');
                set_post_thumbnail($product_id, $image_id);
            }
        }
    }
}

update_existing_products_featured_image();

字符串
对此有何建议?

ev7lccsx

ev7lccsx1#

经过多次挖掘,我在woocommerce中使用add_filter钩子解决了它

function set_custom_attribute_image_as_product_image($image, $product) {
    $images_attribute = $product->get_attribute('images');
    
    
    if (!empty($images_attribute)) {
         // Extract the first image link from the "images" attribute
         $images = explode('|', $images_attribute);
         $first_image = !empty($images[0]) ? $images[0] : '';

         if ($first_image) {
             // Replace the default product image with the first image from the attribute
             $image = '<img src="' . esc_url($first_image) . '" alt="' . esc_attr($product->get_name()) . '" class="attachment-woocommerce_thumbnail size-woocommerce_thumbnail">';
         }
     }

     return $image;
 }
 add_filter('woocommerce_product_get_image', 'set_custom_attribute_image_as_product_image', 10, 2);

字符串
这里我设置了img src而不是将其设置为特色图像......对于我的用例来说效果很好。

gstyhher

gstyhher2#

我有一个类似的解决方案……如果我找到了解决办法,我会在这里与大家分享。

相关问题