Php 发布产品钩子激活时,WooCommerce产品尚未包含图像

Php 发布产品钩子激活时,WooCommerce产品尚未包含图像,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,我正在为WooCommerce编写一个插件(WooCommerce是Wordpress的插件),它需要在保存产品时收集有关产品的数据。要做到这一点,我将连接到publish\u产品操作 add_action ('publish_product', 'plugin_xyz_publish_product', 20, 2); function plugin_xyz_publish_product ($id, $post) { $productFactory = new WC_Product

我正在为WooCommerce编写一个插件(WooCommerce是Wordpress的插件),它需要在保存产品时收集有关产品的数据。要做到这一点,我将连接到
publish\u产品
操作

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\u dump
语句输出以下内容:

如图所示,产品图片在其中,而产品库图片(Wordpress中的附件)则不在其中。似乎只有在发布挂钩被触发后,附件才会被保存。由于在我的函数结束时结束了脚本(
die()
),产品页面上的产品库图像丢失(它们没有保存到数据库)这一事实似乎证实了这一点。当我移除
die()
时,附件可以很好地保存。

但是,我仍然无法通过编程方式访问这些附件。有什么想法吗?

woocommerce\u process\u product\u meta
钩子(优先级20)之前,图像不会被保存,因此您应该附加到具有更高优先级的同一钩子,即:30

此外,获取产品对象的最佳方法是通过
wc\u get\u 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)));
}

图像在挂起之前不会保存,因此您应该以更高的优先级附加到同一挂起,即:30。@helgatheviking
add_action('woocommerce\u process\u product\u meta','plugin\u xyz\u process\u product\u meta',30,2)成功:)谢谢。可能想将此添加为答案而不是评论,但…完成。如果你不介意接受,那就太好了。