मैं 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
RobinJ 11 जिंदा 2017, 16:03
चित्र तब तक सहेजे नहीं जाते जब तक woocommerce_process_product_meta हुक ताकि आपको बाद की प्राथमिकता के साथ उसी हुक से जोड़ना चाहिए, यानी: 30.
 – 
helgatheviking
11 जिंदा 2017, 16:08
add_action ('woocommerce_process_product_meta', 'plugin_xyz_process_product_meta', 30, 2); चाल है :) धन्यवाद। टिप्पणी के बजाय इसे उत्तर के रूप में जोड़ना चाह सकते हैं, हालाँकि ...
 – 
RobinJ
11 जिंदा 2017, 17:00
किया हुआ। अगर आपको इसे स्वीकार करने में कोई आपत्ति नहीं है, तो यह बहुत अच्छा होगा।
 – 
helgatheviking
12 जिंदा 2017, 02:43

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)));
}
2
helgatheviking 12 जिंदा 2017, 02:43