मैं 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
जैसा कि देखा जा सकता है, उत्पाद छवि वहां है, फिर भी उत्पाद गैलरी छवियां (जो वर्डप्रेस में संलग्नक हैं) नहीं हैं। ऐसा लगता है कि अटैचमेंट केवल प्रकाशित हुक के सक्रिय होने के बाद ही सहेजे जाते हैं। तथ्य यह है कि मेरे फ़ंक्शन के अंत में स्क्रिप्ट (die ()
) को समाप्त करने के कारण उत्पाद पृष्ठ पर उत्पाद गैलरी छवियां गायब हैं (वे डेटाबेस में सहेजी नहीं जा रही हैं) इसकी पुष्टि करती हैं। जब मैं die ()
को हटाता हूं तो अटैचमेंट ठीक से सहेजे जा रहे हैं।
हालाँकि, मैं अभी भी इन अनुलग्नकों को प्रोग्रामिक रूप से एक्सेस नहीं कर सकता। कोई विचार?
1 उत्तर
छवियों को 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)));
}
संबंधित सवाल
नए सवाल
php
PHP एक व्यापक रूप से उपयोग किया जाता है, उच्च-स्तरीय, गतिशील, वस्तु-उन्मुख, और व्याख्या की गई स्क्रिप्टिंग भाषा मुख्य रूप से सर्वर-साइड वेब विकास के लिए डिज़ाइन की गई है। PHP भाषा के बारे में सवालों के लिए इस्तेमाल किया।
woocommerce_process_product_meta
हुक ताकि आपको बाद की प्राथमिकता के साथ उसी हुक से जोड़ना चाहिए, यानी: 30.add_action ('woocommerce_process_product_meta', 'plugin_xyz_process_product_meta', 30, 2);
चाल है :) धन्यवाद। टिप्पणी के बजाय इसे उत्तर के रूप में जोड़ना चाह सकते हैं, हालाँकि ...