我正在为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 ()
时,附件会得到妥善保存
但是,我仍然无法以编程方式访问这些附件。有什么想法吗?
答案 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)));
}