当publish_product挂钩触发时,WooCommerce产品还不包含图像

时间:2017-01-11 13:03:40

标签: php wordpress woocommerce

我正在为WooCommerce(这是一个Wordpress插件)编写一个插件,需要在保存时收集有关产品的数据。为此,我正在进行publish_product行动。

add_action ('publish_product', 'plugin_xyz_publish_product', 20, 2);

function plugin_xyz_publish_product ($id, $post)
{
    $productFactory = new WC_Product_Factory ();
    $product = $productFactory->get_product ($id);

    $productImageId = $product->get_image_id ();
    $productImage = wp_get_attachment_url ($productImageId);

    $productGalleryImageIds = $product->get_gallery_attachment_ids ();
    $productGalleryImages = [];
    foreach ($productGalleryImageIds as $attachmentId)
        $productGalleryImages[] = wp_get_attachment_url ($attachmentId);

    die (var_dump ($product, $productGalleryImageIds, $productGalleryImages, $productImage, get_post_meta ($post->ID)));
}

var_dump语句输出以下内容; https://hastebin.com/honupuyedu.php

可以看出,产品图像在那里,但产品图库图像(Wordpress中的附件)却没有。似乎附件仅在发布挂钩被触发后保存。事实上,由于在我的函数结束时结束了脚本(die ()),产品页面上缺少产品库图像(它们没有保存到数据库中)似乎证实了这一点。当我删除die ()时,附件会得到妥善保存 但是,我仍然无法以编程方式访问这些附件。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

图像不会保存到woocommerce_process_product_meta挂钩(优先级为20),因此您应该使用稍后的优先级附加到相同的挂钩,即:30

此外,获取产品对象的最佳方式是wc_get_product(),因此我已针对此调整了您的代码。

add_action ('woocommerce_process_product_meta', 'plugin_xyz_process_product_meta', 30, 2);

function plugin_xyz_publish_product ($id, $post)
{
    $product = wc_get_product( $id );

    $productImageId = $product->get_image_id ();
    $productImage = wp_get_attachment_url ($productImageId);

    $productGalleryImageIds = $product->get_gallery_attachment_ids ();
    $productGalleryImages = [];
    foreach ($productGalleryImageIds as $attachmentId) {
        $productGalleryImages[] = wp_get_attachment_url ($attachmentId);
    }

    die (var_dump ($product, $productGalleryImageIds, $productGalleryImages, $productImage, get_post_meta ($post->ID)));
}