gory ) { $retailer_id = $this->get_retailer_id( $wc_category ); $fb_catalog_id = facebook_for_woocommerce()->get_integration()->get_product_catalog_id(); try { $response = facebook_for_woocommerce()->get_api()->read_product_set_item( $fb_catalog_id, $retailer_id ); } catch ( \Exception $e ) { $message = sprintf( 'There was an error trying to get product set data in a catalog: %s', $e->getMessage() ); facebook_for_woocommerce()->log( $message ); /** * Re-throw the exception to prevent potential issues, such as creating duplicate sets. */ throw $e; } return $response->get_product_set_id(); } protected function build_fb_product_set_data( $wc_category ) { $wc_category_name = get_term_field( 'name', $wc_category, self::WC_PRODUCT_CATEGORY_TAXONOMY ); $wc_category_description = get_term_field( 'description', $wc_category, self::WC_PRODUCT_CATEGORY_TAXONOMY ); $wc_category_url = get_term_link( $wc_category, self::WC_PRODUCT_CATEGORY_TAXONOMY ); $wc_category_thumbnail_id = get_term_meta( $wc_category, 'thumbnail_id', true ); $wc_category_thumbnail_url = wp_get_attachment_image_src( $wc_category_thumbnail_id ); $fb_product_set_metadata = array(); if ( ! empty( $wc_category_thumbnail_url ) ) { $fb_product_set_metadata['cover_image_url'] = $wc_category_thumbnail_url; } if ( ! empty( $wc_category_description ) ) { $fb_product_set_metadata['description'] = $wc_category_description; } if ( ! empty( $wc_category_url ) ) { $fb_product_set_metadata['external_url'] = $wc_category_url; } $fb_product_set_data = array( 'name' => $wc_category_name, 'filter' => wp_json_encode( array( 'and' => array( array( 'product_type' => array( 'i_contains' => $wc_category_name ) ) ) ) ), 'retailer_id' => $this->get_retailer_id( $wc_category ), 'metadata' => wp_json_encode( $fb_product_set_metadata ), ); return $fb_product_set_data; } protected function create_fb_product_set( $wc_category ) { $fb_product_set_data = $this->build_fb_product_set_data( $wc_category ); $fb_catalog_id = facebook_for_woocommerce()->get_integration()->get_product_catalog_id(); try { facebook_for_woocommerce()->get_api()->create_product_set_item( $fb_catalog_id, $fb_product_set_data ); } catch ( \Exception $e ) { $message = sprintf( 'There was an error trying to create product set: %s', $e->getMessage() ); facebook_for_woocommerce()->log( $message ); } } protected function update_fb_product_set( $wc_category, $fb_product_set_id ) { $fb_product_set_data = $this->build_fb_product_set_data( $wc_category ); try { facebook_for_woocommerce()->get_api()->update_product_set_item( $fb_product_set_id, $fb_product_set_data ); } catch ( \Exception $e ) { $message = sprintf( 'There was an error trying to update product set: %s', $e->getMessage() ); facebook_for_woocommerce()->log( $message ); } } protected function delete_fb_product_set( $fb_product_set_id ) { try { $allow_live_deletion = true; facebook_for_woocommerce()->get_api()->delete_product_set_item( $fb_product_set_id, $allow_live_deletion ); } catch ( \Exception $e ) { $message = sprintf( 'There was an error trying to delete product set in a catalog: %s', $e->getMessage() ); facebook_for_woocommerce()->log( $message ); } } private function sync_all_wc_product_categories() { $wc_product_categories = get_terms( array( 'taxonomy' => self::WC_PRODUCT_CATEGORY_TAXONOMY, 'hide_empty' => false, 'orderby' => 'ID', 'order' => 'ASC', ) ); foreach ( $wc_product_categories as $wc_category ) { try { $fb_product_set_id = $this->get_fb_product_set_id( $wc_category ); if ( ! empty( $fb_product_set_id ) ) { $this->update_fb_product_set( $wc_category, $fb_product_set_id ); } else { $this->create_fb_product_set( $wc_category ); } } catch ( \Exception $exception ) { $this->log_exception( $exception ); } } } }