function woo_ce_get_product_categories($args = array()) { $term_taxonomy = 'product_cat'; $defaults = array('orderby' => 'name', 'order' => 'ASC', 'hide_empty' => 0); $args = wp_parse_args($args, $defaults); $categories = get_terms($term_taxonomy, $args); if (!empty($categories) && is_wp_error($categories) == false) { foreach ($categories as $key => $category) { $categories[$key]->description = woo_ce_format_description_excerpt($category->description); $categories[$key]->parent_name = ''; if ($categories[$key]->parent_id = $category->parent) { if ($parent_category = get_term($categories[$key]->parent_id, $term_taxonomy)) { $categories[$key]->parent_name = $parent_category->name; } unset($parent_category); } else { $categories[$key]->parent_id = ''; } $categories[$key]->image = woo_ce_get_category_thumbnail_url($category->term_id); $categories[$key]->display_type = get_woocommerce_term_meta($category->term_id, 'display_type', true); } return $categories; } }
function woo_ce_export_dataset( $export_type = null, &$output = null ) { global $export; $separator = $export->delimiter; $line_ending = woo_ce_get_line_ending(); $export->columns = array(); $export->total_rows = 0; $export->total_columns = 0; $troubleshooting_url = 'http://www.visser.com.au/documentation/store-exporter-deluxe/usage/'; set_transient( WOO_CD_PREFIX . '_running', time(), woo_ce_get_option( 'timeout', MINUTE_IN_SECONDS ) ); // Load up the fatal error notice if we 500 Internal Server Error (memory), hit a server timeout or encounter a fatal PHP error add_action( 'shutdown', 'woo_ce_fatal_error' ); // Drop in our content filters here add_filter( 'sanitize_key', 'woo_ce_sanitize_key' ); switch( $export_type ) { // Products case 'product': $fields = woo_ce_get_product_fields( 'summary' ); if( $export->fields = array_intersect_assoc( (array)$export->fields, $fields ) ) { foreach( $export->fields as $key => $field ) $export->columns[] = woo_ce_get_product_field( $key ); } if( $export->gallery_unique ) { $export->fields = woo_ce_unique_product_gallery_fields( $export->fields ); $export->columns = woo_ce_unique_product_gallery_columns( $export->columns, $export->fields ); } $export->total_columns = count( $export->columns ); $export->data_memory_start = woo_ce_current_memory_usage(); if( $products = woo_ce_get_products( $export->args ) ) { $export->total_rows = count( $products ); // XML export if( $export->export_format == 'xml' ) { if( !empty( $export->fields ) ) { foreach( $products as $product ) { $child = $output->addChild( apply_filters( 'woo_ce_export_xml_product_node', sanitize_key( $export_type ) ) ); $product = woo_ce_get_product_data( $product, $export->args, array_keys( $export->fields ) ); foreach( array_keys( $export->fields ) as $key => $field ) { if( isset( $product->$field ) ) { if( !is_array( $field ) ) { if( woo_ce_is_xml_cdata( $product->$field, $export_type, $field ) ) $child->addChild( sanitize_key( $export->columns[$key] ) )->addCData( woo_ce_sanitize_xml_string( $product->$field ) ); else $child->addChild( sanitize_key( $export->columns[$key] ), esc_html( woo_ce_sanitize_xml_string( $product->$field ) ) ); } } } } } } else if( $export->export_format == 'rss' ) { // RSS export if( !empty( $export->fields ) ) { foreach( $products as $product ) { $child = $output->addChild( 'item' ); $product = woo_ce_get_product_data( $product, $export->args, array_keys( $export->fields ) ); foreach( array_keys( $export->fields ) as $field ) { if( isset( $product->$field ) ) { if( !is_array( $field ) ) { if( woo_ce_is_xml_cdata( $product->$field ) ) $child->addChild( sanitize_key( $field ) )->addCData( esc_html( woo_ce_sanitize_xml_string( $product->$field ) ) ); else $child->addChild( sanitize_key( $field ), esc_html( woo_ce_sanitize_xml_string( $product->$field ) ) ); } } } } } } else { // PHPExcel export foreach( $products as $key => $product ) { $products[$key] = woo_ce_get_product_data( $product, $export->args, array_keys( $export->fields ) ); } $output = $products; } unset( $products, $product ); } $export->data_memory_end = woo_ce_current_memory_usage(); break; // Categories case 'category': $fields = woo_ce_get_category_fields( 'summary' ); if( $export->fields = array_intersect_assoc( (array)$export->fields, $fields ) ) { foreach( $export->fields as $key => $field ) $export->columns[] = woo_ce_get_category_field( $key ); } $export->total_columns = count( $export->columns ); $export->data_memory_start = woo_ce_current_memory_usage(); $category_args = array( 'orderby' => ( isset( $export->args['category_orderby'] ) ? $export->args['category_orderby'] : 'ID' ), 'order' => ( isset( $export->args['category_order'] ) ? $export->args['category_order'] : 'ASC' ), ); if( $categories = woo_ce_get_product_categories( $category_args ) ) { $export->total_rows = count( $categories ); // XML, RSS export if( in_array( $export->export_format, array( 'xml', 'rss' ) ) ) { if( !empty( $export->fields ) ) { foreach( $categories as $category ) { if( $export->export_format == 'xml' ) $child = $output->addChild( apply_filters( 'woo_ce_export_xml_category_node', sanitize_key( $export_type ) ) ); else if( $export->export_format == 'rss' ) $child = $output->addChild( 'item' ); foreach( array_keys( $export->fields ) as $key => $field ) { if( isset( $category->$field ) ) { if( !is_array( $field ) ) { if( woo_ce_is_xml_cdata( $category->$field ) ) $child->addChild( sanitize_key( $export->columns[$key] ) )->addCData( esc_html( woo_ce_sanitize_xml_string( $category->$field ) ) ); else $child->addChild( sanitize_key( $export->columns[$key] ), esc_html( woo_ce_sanitize_xml_string( $category->$field ) ) ); } } } } } } else { // PHPExcel export $output = $categories; } unset( $categories, $category ); } $export->data_memory_end = woo_ce_current_memory_usage(); break; // Tags case 'tag': $fields = woo_ce_get_tag_fields( 'summary' ); if( $export->fields = array_intersect_assoc( (array)$export->fields, $fields ) ) { foreach( $export->fields as $key => $field ) $export->columns[] = woo_ce_get_tag_field( $key ); } $export->total_columns = count( $export->columns ); $export->data_memory_start = woo_ce_current_memory_usage(); $tag_args = array( 'orderby' => ( isset( $export->args['tag_orderby'] ) ? $export->args['tag_orderby'] : 'ID' ), 'order' => ( isset( $export->args['tag_order'] ) ? $export->args['tag_order'] : 'ASC' ), ); if( $tags = woo_ce_get_product_tags( $tag_args ) ) { $export->total_rows = count( $tags ); // XML, RSS export if( in_array( $export->export_format, array( 'xml', 'rss' ) ) ) { if( !empty( $export->fields ) ) { foreach( $tags as $tag ) { if( $export->export_format == 'xml' ) $child = $output->addChild( apply_filters( 'woo_ce_export_xml_tag_node', sanitize_key( $export_type ) ) ); else if( $export->export_format == 'rss' ) $child = $output->addChild( 'item' ); foreach( array_keys( $export->fields ) as $key => $field ) { if( isset( $tag->$field ) ) { if( !is_array( $field ) ) { if( woo_ce_is_xml_cdata( $tag->$field ) ) $child->addChild( sanitize_key( $export->columns[$key] ) )->addCData( esc_html( woo_ce_sanitize_xml_string( $tag->$field ) ) ); else $child->addChild( sanitize_key( $export->columns[$key] ), esc_html( woo_ce_sanitize_xml_string( $tag->$field ) ) ); } } } } } } else { // PHPExcel export $output = $tags; } unset( $tags, $tag ); } $export->data_memory_end = woo_ce_current_memory_usage(); break; // Brands case 'brand': $fields = woo_ce_get_brand_fields( 'summary' ); if( $export->fields = array_intersect_assoc( (array)$export->fields, $fields ) ) { foreach( $export->fields as $key => $field ) $export->columns[] = woo_ce_get_brand_field( $key ); } $export->total_columns = count( $export->columns ); $export->data_memory_start = woo_ce_current_memory_usage(); $brand_args = array( 'orderby' => ( isset( $export->args['brand_orderby'] ) ? $export->args['brand_orderby'] : 'ID' ), 'order' => ( isset( $export->args['brand_order'] ) ? $export->args['brand_order'] : 'ASC' ), ); if( $brands = woo_ce_get_product_brands( $brand_args ) ) { $export->total_rows = count( $brands ); // XML, RSS export if( in_array( $export->export_format, array( 'xml', 'rss' ) ) ) { if( !empty( $export->fields ) ) { foreach( $brands as $brand ) { if( $export->export_format == 'xml' ) $child = $output->addChild( apply_filters( 'woo_ce_export_xml_brand_node', sanitize_key( $export_type ) ) ); else if( $export->export_format == 'rss' ) $child = $output->addChild( 'item' ); foreach( array_keys( $export->fields ) as $key => $field ) { if( isset( $brand->$field ) ) { if( !is_array( $field ) ) { if( woo_ce_is_xml_cdata( $brand->$field ) ) $child->addChild( sanitize_key( $export->columns[$key] ) )->addCData( esc_html( woo_ce_sanitize_xml_string( $brand->$field ) ) ); else $child->addChild( sanitize_key( $export->columns[$key] ), esc_html( woo_ce_sanitize_xml_string( $brand->$field ) ) ); } } } } } } else { // PHPExcel export $output = $brands; } unset( $brands, $brand ); } $export->data_memory_end = woo_ce_current_memory_usage(); break; // Orders case 'order': $fields = woo_ce_get_order_fields( 'summary' ); if( $export->fields = array_intersect_assoc( (array)$export->fields, $fields ) ) { // Do not apply Field Editor changes to the unique Order Items Formatting rule if( $export->args['order_items'] == 'unique' ) remove_filter( 'woo_ce_order_fields', 'woo_ce_override_order_field_labels', 11 ); foreach( $export->fields as $key => $field ) $export->columns[] = woo_ce_get_order_field( $key ); // Do not apply Field Editor changes to the unique Order Items Formatting rule if( $export->args['order_items'] == 'unique' ) add_filter( 'woo_ce_order_fields', 'woo_ce_override_order_field_labels', 11 ); } if( $export->args['order_items'] == 'unique' ) { $export->fields = woo_ce_unique_order_item_fields( $export->fields ); $export->columns = woo_ce_unique_order_item_columns( $export->columns, $export->fields ); } $export->data_memory_start = woo_ce_current_memory_usage(); if( $orders = woo_ce_get_orders( 'order', $export->args ) ) { $export->total_columns = $size = count( $export->columns ); // XML, RSS export if( in_array( $export->export_format, array( 'xml', 'rss' ) ) ) { if( !empty( $export->fields ) ) { foreach( $orders as $order ) { if( $export->export_format == 'xml' ) $child = $output->addChild( apply_filters( 'woo_ce_export_xml_order_node', sanitize_key( $export_type ) ) ); else if( $export->export_format == 'rss' ) $child = $output->addChild( 'item' ); $child->addAttribute( 'id', $order ); $order = woo_ce_get_order_data( $order, 'order', $export->args, array_keys( $export->fields ) ); if( in_array( $export->args['order_items'], array( 'combined', 'unique' ) ) ) { // Order items formatting: SPECK-IPHONE|INCASE-NANO|- foreach( array_keys( $export->fields ) as $key => $field ) { if( isset( $order->$field ) ) { if( !is_array( $field ) ) { if( woo_ce_is_xml_cdata( $order->$field ) ) $child->addChild( sanitize_key( $export->columns[$key] ) )->addCData( esc_html( woo_ce_sanitize_xml_string( $order->$field ) ) ); else $child->addChild( sanitize_key( $export->columns[$key] ), esc_html( woo_ce_sanitize_xml_string( $order->$field ) ) ); } } } } else if( $export->args['order_items'] == 'individual' ) { // Order items formatting: SPECK-IPHONE<br />INCASE-NANO<br />- if( !empty( $order->order_items ) ) { $order->order_items_product_id = ''; $order->order_items_variation_id = ''; $order->order_items_sku = ''; $order->order_items_name = ''; $order->order_items_variation = ''; $order->order_items_description = ''; $order->order_items_excerpt = ''; $order->order_items_tax_class = ''; $order->order_items_quantity = ''; $order->order_items_total = ''; $order->order_items_subtotal = ''; $order->order_items_rrp = ''; $order->order_items_stock = ''; $order->order_items_tax = ''; $order->order_items_tax_subtotal = ''; $order->order_items_type = ''; $order->order_items_category = ''; $order->order_items_tag = ''; $order->order_items_total_sales = ''; $order->order_items_weight = ''; $order->order_items_total_weight = ''; foreach( $order->order_items as $order_item ) { // Add Order Item weight to Shipping Weight if( $order_item->total_weight != '' ) $order->shipping_weight = $order->shipping_weight + $order_item->total_weight; $order->order_items_product_id = $order_item->product_id; $order->order_items_variation_id = $order_item->variation_id; if( empty( $order_item->sku ) ) $order_item->sku = ''; $order->order_items_sku = $order_item->sku; $order->order_items_name = $order_item->name; $order->order_items_variation = $order_item->variation; $order->order_items_description = woo_ce_format_description_excerpt( $order_item->description ); $order->order_items_excerpt = woo_ce_format_description_excerpt( $order_item->excerpt ); $order->order_items_tax_class = $order_item->tax_class; $order->total_quantity += $order_item->quantity; $order->order_items_quantity = $order_item->quantity; $order->order_items_total = $order_item->total; $order->order_items_subtotal = $order_item->subtotal; $order->order_items_rrp = $order_item->rrp; $order->order_items_stock = $order_item->stock; $order->order_items_tax = $order_item->tax; $order->order_items_tax_subtotal = $order_item->tax_subtotal; $order->order_items_type = $order_item->type; $order->order_items_category = $order_item->category; $order->order_items_tag = $order_item->tag; $order->order_items_total_sales = $order_item->total_sales; $order->order_items_weight = $order_item->weight; $order->order_items_total_weight = $order_item->total_weight; $order = apply_filters( 'woo_ce_order_items_individual', $order, $order_item ); foreach( array_keys( $export->fields ) as $key => $field ) { if( isset( $order->$field ) ) { if( !is_array( $field ) ) { if( woo_ce_is_xml_cdata( $order->$field ) ) $child->addChild( sanitize_key( $export->columns[$key] ) )->addCData( esc_html( woo_ce_sanitize_xml_string( $order->$field ) ) ); else $child->addChild( sanitize_key( $export->columns[$key] ), esc_html( woo_ce_sanitize_xml_string( $order->$field ) ) ); } } } } unset( $order->order_items ); } } } } } else { // PHPExcel export if( $export->args['order_items'] == 'individual' ) $output = array(); foreach( $orders as $order ) { if( in_array( $export->args['order_items'], array( 'combined', 'unique' ) ) ) { // Order items formatting: SPECK-IPHONE|INCASE-NANO|- $output[] = woo_ce_get_order_data( $order, 'order', $export->args, array_keys( $export->fields ) ); } else if( $export->args['order_items'] == 'individual' ) { // Order items formatting: SPECK-IPHONE<br />INCASE-NANO<br />- $order = woo_ce_get_order_data( $order, 'order', $export->args, array_keys( $export->fields ) ); if( !empty( $order->order_items ) ) { foreach( $order->order_items as $order_item ) { // Add Order Item weight to Shipping Weight if( $order_item->total_weight != '' ) $order->shipping_weight = $order->shipping_weight + $order_item->total_weight; $order->order_items_product_id = $order_item->product_id; $order->order_items_variation_id = $order_item->variation_id; if( empty( $order_item->sku ) ) $order_item->sku = ''; $order->order_items_sku = $order_item->sku; $order->order_items_name = $order_item->name; $order->order_items_variation = $order_item->variation; $order->order_items_description = $order_item->description; $order->order_items_excerpt = $order_item->excerpt; $order->order_items_tax_class = $order_item->tax_class; $order->total_quantity += $order_item->quantity; $order->order_items_quantity = $order_item->quantity; $order->order_items_total = $order_item->total; $order->order_items_subtotal = $order_item->subtotal; $order->order_items_rrp = $order_item->rrp; $order->order_items_stock = $order_item->stock; $order->order_items_tax = $order_item->tax; $order->order_items_tax_subtotal = $order_item->tax_subtotal; $order->order_items_type = $order_item->type; $order->order_items_category = $order_item->category; $order->order_items_tag = $order_item->tag; $order->order_items_total_sales = $order_item->total_sales; $order->order_items_weight = $order_item->weight; $order->order_items_total_weight = $order_item->total_weight; $order = apply_filters( 'woo_ce_order_items_individual', $order, $order_item ); // This fixes the Order Items for this Order Items Formatting rule $output[] = (object)(array)$order; } } } } } unset( $orders, $order ); } $export->data_memory_end = woo_ce_current_memory_usage(); break; // Customers case 'customer': $fields = woo_ce_get_customer_fields( 'summary' ); if( $export->fields = array_intersect_assoc( (array)$export->fields, $fields ) ) { foreach( $export->fields as $key => $field ) $export->columns[] = woo_ce_get_customer_field( $key ); } $export->total_columns = count( $export->columns ); $export->data_memory_start = woo_ce_current_memory_usage(); if( $customers = woo_ce_get_orders( 'customer', $export->args ) ) { $export->total_rows = count( $customers ); // XML, RSS export if( in_array( $export->export_format, array( 'xml', 'rss' ) ) ) { if( !empty( $export->fields ) ) { foreach( $customers as $customer ) { if( $export->export_format == 'xml' ) $child = $output->addChild( apply_filters( 'woo_ce_export_xml_customer_node', sanitize_key( $export_type ) ) ); else if( $export->export_format == 'rss' ) $child = $output->addChild( 'item' ); foreach( array_keys( $export->fields ) as $key => $field ) { if( isset( $customer->$field ) ) { if( !is_array( $field ) ) { if( woo_ce_is_xml_cdata( $customer->$field ) ) $child->addChild( sanitize_key( $export->columns[$key] ) )->addCData( esc_html( woo_ce_sanitize_xml_string( $customer->$field ) ) ); else $child->addChild( sanitize_key( $export->columns[$key] ), esc_html( woo_ce_sanitize_xml_string( $customer->$field ) ) ); } } } } } } else { // PHPExcel export $output = $customers; } unset( $customers, $customer ); } $export->data_memory_end = woo_ce_current_memory_usage(); break; // Users case 'user': $fields = woo_ce_get_user_fields( 'summary' ); if( $export->fields = array_intersect_assoc( (array)$export->fields, $fields ) ) { foreach( $export->fields as $key => $field ) $export->columns[] = woo_ce_get_user_field( $key ); } $export->total_columns = count( $export->columns ); $export->data_memory_start = woo_ce_current_memory_usage(); if( $users = woo_ce_get_users( $export->args ) ) { // XML, RSS export if( in_array( $export->export_format, array( 'xml', 'rss' ) ) ) { $export->total_rows = count( $users ); if( !empty( $export->fields ) ) { foreach( $users as $user ) { if( $export->export_format == 'xml' ) $child = $output->addChild( apply_filters( 'woo_ce_export_xml_user_node', sanitize_key( $export_type ) ) ); else if( $export->export_format == 'rss' ) $child = $output->addChild( 'item' ); $user = woo_ce_get_user_data( $user, $export->args, array_keys( $export->fields ) ); foreach( array_keys( $export->fields ) as $key => $field ) { if( isset( $user->$field ) ) { if( !is_array( $field ) ) { if( woo_ce_is_xml_cdata( $user->$field ) ) $child->addChild( sanitize_key( $export->columns[$key] ) )->addCData( esc_html( woo_ce_sanitize_xml_string( $user->$field ) ) ); else $child->addChild( sanitize_key( $export->columns[$key] ), esc_html( woo_ce_sanitize_xml_string( $user->$field ) ) ); } } } } } } else { // PHPExcel export foreach( $users as $key => $user ) $users[$key] = woo_ce_get_user_data( $user, $export->args, array_keys( $export->fields ) ); $output = $users; } unset( $users, $user ); } $export->data_memory_end = woo_ce_current_memory_usage(); break; // Coupons case 'coupon': $fields = woo_ce_get_coupon_fields( 'summary' ); if( $export->fields = array_intersect_assoc( (array)$export->fields, $fields ) ) { foreach( $export->fields as $key => $field ) $export->columns[] = woo_ce_get_coupon_field( $key ); } $export->total_columns = count( $export->columns ); $export->data_memory_start = woo_ce_current_memory_usage(); if( $coupons = woo_ce_get_coupons( $export->args ) ) { // XML, RSS export if( in_array( $export->export_format, array( 'xml', 'rss' ) ) ) { $export->total_rows = count( $coupons ); if( !empty( $export->fields ) ) { foreach( $coupons as $coupon ) { if( $export->export_format == 'xml' ) $child = $output->addChild( apply_filters( 'woo_ce_export_xml_coupon_node', sanitize_key( $export_type ) ) ); else if( $export->export_format == 'rss' ) $child = $output->addChild( 'item' ); $coupon = woo_ce_get_coupon_data( $coupon, $export->args, array_keys( $export->fields ) ); foreach( array_keys( $export->fields ) as $key => $field ) { if( isset( $coupon->$field ) ) { if( !is_array( $field ) ) { if( woo_ce_is_xml_cdata( $coupon->$field ) ) $child->addChild( sanitize_key( $export->columns[$key] ) )->addCData( esc_html( woo_ce_sanitize_xml_string( $coupon->$field ) ) ); else $child->addChild( sanitize_key( $export->columns[$key] ), esc_html( woo_ce_sanitize_xml_string( $coupon->$field ) ) ); } } } } } } else { // PHPExcel export foreach( $coupons as $key => $coupon ) { $coupons[$key] = woo_ce_get_coupon_data( $coupon, $export->args, array_keys( $export->fields ) ); } $output = $coupons; } unset( $coupons, $coupon ); } $export->data_memory_end = woo_ce_current_memory_usage(); break; // Subscriptions case 'subscription': $fields = woo_ce_get_subscription_fields( 'summary' ); if( $export->fields = array_intersect_assoc( (array)$export->fields, $fields ) ) { foreach( $export->fields as $key => $field ) $export->columns[] = woo_ce_get_subscription_field( $key ); } $export->total_columns = count( $export->columns ); $export->data_memory_start = woo_ce_current_memory_usage(); if( $subscriptions = woo_ce_get_subscriptions( $export->args ) ) { $export->total_rows = count( $subscriptions ); // XML, RSS export if( in_array( $export->export_format, array( 'xml', 'rss' ) ) ) { if( !empty( $export->fields ) ) { foreach( $subscriptions as $subscription ) { if( $export->export_format == 'xml' ) $child = $output->addChild( apply_filters( 'woo_ce_export_xml_subscription_node', sanitize_key( $export_type ) ) ); else if( $export->export_format == 'rss' ) $child = $output->addChild( 'item' ); foreach( array_keys( $export->fields ) as $key => $field ) { if( isset( $subscription->$field ) ) { if( !is_array( $field ) ) { if( woo_ce_is_xml_cdata( $subscription->$field ) ) $child->addChild( sanitize_key( $export->columns[$key] ) )->addCData( esc_html( woo_ce_sanitize_xml_string( $subscription->$field ) ) ); else $child->addChild( sanitize_key( $export->columns[$key] ), esc_html( woo_ce_sanitize_xml_string( $subscription->$field ) ) ); } } } } } } else { // PHPExcel export $output = $subscriptions; } unset( $subscriptions, $subscription ); } $export->data_memory_end = woo_ce_current_memory_usage(); break; // Product Vendors case 'product_vendor': $fields = woo_ce_get_product_vendor_fields( 'summary' ); if( $export->fields = array_intersect_assoc( (array)$export->fields, $fields ) ) { foreach( $export->fields as $key => $field ) $export->columns[] = woo_ce_get_product_vendor_field( $key ); } $export->total_columns = count( $export->columns ); $export->data_memory_start = woo_ce_current_memory_usage(); if( $product_vendors = woo_ce_get_product_vendors( $export->args ) ) { // XML, RSS export if( in_array( $export->export_format, array( 'xml', 'rss' ) ) ) { $export->total_rows = count( $product_vendors ); if( !empty( $export->fields ) ) { foreach( $product_vendors as $product_vendor ) { if( $export->export_format == 'xml' ) $child = $output->addChild( apply_filters( 'woo_ce_export_xml_product_vendor_node', sanitize_key( $export_type ) ) ); else if( $export->export_format == 'rss' ) $child = $output->addChild( 'item' ); $product_vendor = woo_ce_get_product_vendor_data( $product_vendor, $export->args, array_keys( $export->fields ) ); foreach( array_keys( $export->fields ) as $key => $field ) { if( isset( $product_vendor->$field ) ) { if( !is_array( $field ) ) { if( woo_ce_is_xml_cdata( $product_vendor->$field ) ) $child->addChild( sanitize_key( $export->columns[$key] ) )->addCData( esc_html( woo_ce_sanitize_xml_string( $product_vendor->$field ) ) ); else $child->addChild( sanitize_key( $export->columns[$key] ), esc_html( woo_ce_sanitize_xml_string( $product_vendor->$field ) ) ); } } } } } } else { // PHPExcel export foreach( $product_vendors as $key => $product_vendor ) { $product_vendors[$key] = woo_ce_get_product_vendor_data( $product_vendor, $export->args, array_keys( $export->fields ) ); } $output = $product_vendors; } unset( $product_vendors, $product_vendor ); } $export->data_memory_end = woo_ce_current_memory_usage(); break; // Commissions case 'commission': $fields = woo_ce_get_commission_fields( 'summary' ); if( $export->fields = array_intersect_assoc( (array)$export->fields, $fields ) ) { foreach( $export->fields as $key => $field ) $export->columns[] = woo_ce_get_commission_field( $key ); } $export->total_columns = count( $export->columns ); $export->data_memory_start = woo_ce_current_memory_usage(); if( $commissions = woo_ce_get_commissions( $export->args ) ) { // XML, RSS export if( in_array( $export->export_format, array( 'xml', 'rss' ) ) ) { $export->total_rows = count( $commissions ); if( !empty( $export->fields ) ) { foreach( $commissions as $commission ) { if( $export->export_format == 'xml' ) $child = $output->addChild( apply_filters( 'woo_ce_export_xml_commission_node', sanitize_key( $export_type ) ) ); else if( $export->export_format == 'rss' ) $child = $output->addChild( 'item' ); $commission = woo_ce_get_commission_data( $commission, $export->args, array_keys( $export->fields ) ); foreach( array_keys( $export->fields ) as $key => $field ) { if( isset( $commission->$field ) ) { if( !is_array( $field ) ) { if( woo_ce_is_xml_cdata( $commission->$field ) ) $child->addChild( sanitize_key( $export->columns[$key] ) )->addCData( esc_html( woo_ce_sanitize_xml_string( $commission->$field ) ) ); else $child->addChild( sanitize_key( $export->columns[$key] ), esc_html( woo_ce_sanitize_xml_string( $commission->$field ) ) ); } } } } } } else { // PHPExcel export foreach( $commissions as $key => $commission ) { $commissions[$key] = woo_ce_get_commission_data( $commission, $export->args, array_keys( $export->fields ) ); } $output = $commissions; } unset( $commissions, $commission ); } $export->data_memory_end = woo_ce_current_memory_usage(); break; // Shipping Classes case 'shipping_class': $fields = woo_ce_get_shipping_class_fields( 'summary' ); if( $export->fields = array_intersect_assoc( (array)$export->fields, $fields ) ) { foreach( $export->fields as $key => $field ) $export->columns[] = woo_ce_get_shipping_class_field( $key ); } $export->total_columns = count( $export->columns ); $export->data_memory_start = woo_ce_current_memory_usage(); if( $shipping_classes = woo_ce_get_shipping_classes( $export->args ) ) { // XML, RSS export if( in_array( $export->export_format, array( 'xml', 'rss' ) ) ) { $export->total_rows = count( $shipping_classes ); if( !empty( $export->fields ) ) { foreach( $shipping_classes as $shipping_class ) { if( $export->export_format == 'xml' ) $child = $output->addChild( apply_filters( 'woo_ce_export_xml_shipping_class_node', sanitize_key( $export_type ) ) ); else if( $export->export_format == 'rss' ) $child = $output->addChild( 'item' ); foreach( array_keys( $export->fields ) as $key => $field ) { if( isset( $shipping_class->$field ) ) { if( !is_array( $field ) ) { if( woo_ce_is_xml_cdata( $shipping_class->$field ) ) $child->addChild( sanitize_key( $export->columns[$key] ) )->addCData( esc_html( woo_ce_sanitize_xml_string( $shipping_class->$field ) ) ); else $child->addChild( sanitize_key( $export->columns[$key] ), esc_html( woo_ce_sanitize_xml_string( $shipping_class->$field ) ) ); } } } } } } else { // PHPExcel export $output = $shipping_classes; } unset( $shipping_classes, $shipping_class ); } $export->data_memory_end = woo_ce_current_memory_usage(); break; /* // Attributes case 'attribute': $fields = woo_ce_get_attribute_fields( 'summary' ); if( $export->fields = array_intersect_assoc( (array)$export->fields, $fields ) ) { foreach( $export->fields as $key => $field ) $export->columns[] = woo_ce_get_attribute_field( $key ); } $export->total_columns = $size = count( $export->columns ); $export->data_memory_start = woo_ce_current_memory_usage(); if( $attributes = woo_ce_get_attributes( $export->args ) ) { $export->total_rows = count( $attributes ); // Generate the export headers if( $export->header_formatting && in_array( $export->export_format, array( 'csv', 'xls' ) ) ) { for( $i = 0; $i < $size; $i++ ) { if( $i == ( $size - 1 ) ) $output .= woo_ce_escape_csv_value( $export->columns[$i], $export->delimiter, $export->escape_formatting ) . $line_ending; else $output .= woo_ce_escape_csv_value( $export->columns[$i], $export->delimiter, $export->escape_formatting ) . $separator; } } if( !empty( $export->fields ) ) { foreach( $atributes as $attribute ) { if( $export->export_format == 'xml' ) $child = $output->addChild( $export->type, 0, -1 ); } } } $export->data_memory_end = woo_ce_current_memory_usage(); unset( $export->fields ); break; */ } // Remove our content filters here to play nice with other Plugins remove_filter( 'sanitize_key', 'woo_ce_sanitize_key' ); // Remove our fatal error notice so not to conflict with the CRON or scheduled export engine remove_action( 'shutdown', 'woo_ce_fatal_error' ); // Export completed successfully delete_transient( WOO_CD_PREFIX . '_running' ); // Check if we're using PHPExcel or generic export engine if( WOO_CD_DEBUG || in_array( $export->export_format, array( 'xml', 'rss' ) ) ) { // Check that the export file is populated, export columns have been assigned and rows counted if( !empty( $output ) && $export->total_rows && $export->total_columns ) { if( WOO_CD_DEBUG && !in_array( $export->export_format, array( 'csv', 'xls', 'xlsx' ) ) && ( !$export->cron && !$export->scheduled_export ) ) { if( in_array( $export->export_format, array( 'xml', 'rss' ) ) ) $output = woo_ce_format_xml( $output ); $response = set_transient( WOO_CD_PREFIX . '_debug_log', base64_encode( $output ), woo_ce_get_option( 'timeout', MINUTE_IN_SECONDS ) ); if( $response !== true ) { $message = __( 'The export contents were too large to store in a single WordPress transient, use the Volume offset / Limit volume options to reduce the size of your export and try again.', 'woo_ce' ) . ' (<a href="' . $troubleshooting_url . '" target="_blank">' . __( 'Need help?', 'woo_ce' ) . '</a>)'; if( function_exists( 'woo_cd_admin_notice' ) ) woo_cd_admin_notice( $message, 'error' ); else error_log( sprintf( '[store-exporter-deluxe] woo_ce_export_dataset() - %s', $message ) ); return; } else { return true; } } else { return $output; } } } else { return $output; } }
function woo_ce_get_product_brands($args = array()) { $term_taxonomy = apply_filters('woo_ce_brand_term_taxonomy', 'product_brand'); $defaults = array('orderby' => 'name', 'order' => 'ASC', 'hide_empty' => 0); $args = wp_parse_args($args, $defaults); $brands = get_terms($term_taxonomy, $args); if (!empty($brands) && is_wp_error($brands) == false) { foreach ($brands as $key => $brand) { $brands[$key]->description = woo_ce_format_description_excerpt($brand->description); $brands[$key]->parent_name = ''; if ($brands[$key]->parent_id = $brand->parent) { if ($parent_brand = get_term($brands[$key]->parent_id, $term_taxonomy)) { $brands[$key]->parent_name = $parent_brand->name; } unset($parent_brand); } else { $brands[$key]->parent_id = ''; } $brands[$key]->image = function_exists('get_brand_thumbnail_url') ? get_brand_thumbnail_url($brand->term_id) : false; } return $brands; } }
function woo_ce_get_order_items( $order_id = 0, $order_items_types = array() ) { global $export, $wpdb; if( !empty( $order_id ) ) { $order_items_sql = $wpdb->prepare( "SELECT `order_item_id` as id, `order_item_name` as name, `order_item_type` as type FROM `" . $wpdb->prefix . "woocommerce_order_items` WHERE `order_id` = %d", $order_id ); if( $order_items = $wpdb->get_results( $order_items_sql ) ) { $wpdb->flush(); foreach( $order_items as $key => $order_item ) { // Default to Line Item for empty Order Item types if( empty( $order_items_types ) ) $order_items_types = array( 'line_item' ); // Filter Order Item types from Orders export if( !in_array( $order_item->type, $order_items_types ) ) { unset( $order_items[$key] ); continue; } $order_item_meta_sql = $wpdb->prepare( "SELECT `meta_key`, `meta_value` FROM `" . $wpdb->prefix . "woocommerce_order_itemmeta` WHERE `order_item_id` = %d ORDER BY meta_key ASC", $order_item->id ); if( $order_item_meta = $wpdb->get_results( $order_item_meta_sql ) ) { $order_items[$key]->product_id = ''; $order_items[$key]->variation_id = ''; $order_items[$key]->sku = ''; $order_items[$key]->description = ''; $order_items[$key]->excerpt = ''; $order_items[$key]->variation = ''; $order_items[$key]->quantity = ''; $order_items[$key]->total = ''; $order_items[$key]->subtotal = ''; $order_items[$key]->rrp = ''; $order_items[$key]->stock = ''; $order_items[$key]->tax = ''; $order_items[$key]->tax_subtotal = ''; $order_items[$key]->tax_class = ''; $order_items[$key]->category = ''; $order_items[$key]->tag = ''; $order_items[$key]->total_sales = ''; $order_items[$key]->weight = ''; $order_items[$key]->total_weight = ''; $size = count( $order_item_meta ); for( $i = 0; $i < $size; $i++ ) { // Go through each Order Item meta found switch( $order_item_meta[$i]->meta_key ) { case '_qty': $order_items[$key]->quantity = $order_item_meta[$i]->meta_value; break; case '_product_id': if( $order_items[$key]->product_id = $order_item_meta[$i]->meta_value ) { $product = get_post( $order_items[$key]->product_id ); if( $product !== null ) { $order_items[$key]->description = woo_ce_format_description_excerpt( $product->post_content ); $order_items[$key]->excerpt = woo_ce_format_description_excerpt( $product->post_excerpt ); } unset( $product ); $order_items[$key]->sku = get_post_meta( $order_items[$key]->product_id, '_sku', true ); $order_items[$key]->category = woo_ce_get_product_assoc_categories( $order_items[$key]->product_id ); $order_items[$key]->tag = woo_ce_get_product_assoc_tags( $order_items[$key]->product_id ); $order_items[$key]->total_sales = get_post_meta( $order_items[$key]->product_id, 'total_sales', true ); $order_items[$key]->weight = get_post_meta( $order_items[$key]->product_id, '_weight', true ); $order_items[$key]->total_weight = ( $order_items[$key]->weight <> '' ? $order_items[$key]->weight * $order_items[$key]->quantity : '' ); $order_items[$key]->rrp = get_post_meta( $order_items[$key]->product_id, '_price', true ); if( isset( $order_items[$key]->rrp ) && $order_items[$key]->rrp != '' ) $order_items[$key]->rrp = woo_ce_format_price( $order_items[$key]->rrp ); $order_items[$key]->stock = get_post_meta( $order_items[$key]->product_id, '_stock', true ); } break; case '_tax_class': $order_items[$key]->tax_class = woo_ce_format_order_item_tax_class( $order_item_meta[$i]->meta_value ); break; case '_line_subtotal': $order_items[$key]->subtotal = woo_ce_format_price( $order_item_meta[$i]->meta_value ); break; case '_line_subtotal_tax': $order_items[$key]->tax_subtotal = woo_ce_format_price( $order_item_meta[$i]->meta_value ); break; case '_line_total': $order_items[$key]->total = woo_ce_format_price( $order_item_meta[$i]->meta_value ); break; case '_line_tax': $order_items[$key]->tax = woo_ce_format_price( $order_item_meta[$i]->meta_value ); break; case '_variation_id': $order_items[$key]->variation = ''; if( $order_items[$key]->variation_id = $order_item_meta[$i]->meta_value ) { // Check if the Variation SKU is set and default to the Product SKU if it is empty $variation_sku = get_post_meta( $order_items[$key]->variation_id, '_sku', true ); if( !empty( $variation_sku ) ) $order_items[$key]->sku = $variation_sku; unset( $variation_sku ); $variations_sql = "SELECT `meta_key` FROM `" . $wpdb->postmeta . "` WHERE `post_id` = " . $order_items[$key]->variation_id . " AND `meta_key` LIKE 'attribute_pa_%' ORDER BY `meta_key` ASC"; // Check if the variation has a taxonomy if( $variations = $wpdb->get_col( $variations_sql ) ) { $attributes = woo_ce_get_product_attributes(); foreach( $variations as $variation ) { $variation = str_replace( 'attribute_pa_', '', $variation ); foreach( $attributes as $attribute ) { if( $attribute->attribute_name == $variation ) { if( empty( $attribute->attribute_label ) ) $attribute->attribute_label = $attribute->attribute_name; $variation_label = $attribute->attribute_label; break; } } $slug = get_post_meta( $order_items[$key]->variation_id, sprintf( 'attribute_pa_%s', $variation ), true ); $term_taxonomy = 'pa_' . $variation; if( taxonomy_exists( $term_taxonomy ) ) { $term = get_term_by( 'slug', $slug, $term_taxonomy ); if( $term && !is_wp_error( $term ) ) $order_items[$key]->variation .= sprintf( apply_filters( 'woo_ce_get_order_items_variation_taxonomy', '%s: %s' ), $variation_label, $term->name ) . "|"; } } unset( $variations, $variation, $variation_label, $slug, $term_taxonomy, $term ); $order_items[$key]->variation = substr( $order_items[$key]->variation, 0, -1 ); } else { // Check for per-Product variations that are not linked to a taxonomy $variations_sql = "SELECT `meta_key` FROM `" . $wpdb->postmeta . "` WHERE `post_id` = " . $order_items[$key]->variation_id . " AND `meta_key` LIKE 'attribute_%' ORDER BY `meta_key` ASC"; if( $variations = $wpdb->get_col( $variations_sql ) ) { foreach( $variations as $variation ) { $variation = str_replace( 'attribute_', '', $variation ); $attribute = get_post_meta( $order_items[$key]->product_id, '_product_attributes', true ); $variation_label = ''; if( !empty( $attribute ) ) { if( isset( $attribute[$variation] ) ) $variation_label = $attribute[$variation]['name']; } $slug = get_post_meta( $order_items[$key]->variation_id, sprintf( 'attribute_%s', $variation ), true ); if( !empty( $slug ) && !empty( $variation_label ) ) $order_items[$key]->variation .= sprintf( apply_filters( 'woo_ce_get_order_items_variation_custom', '%s: %s' ), $variation_label, ucwords( $slug ) ) . "\n"; } $order_items[$key]->variation = substr( $order_items[$key]->variation, 0, -1 ); unset( $variations, $variation, $attribute, $slug ); } } } break; // This is for any custom Order Item meta default: $order_items[$key] = apply_filters( 'woo_ce_order_item_custom_meta', $order_items[$key], $order_item_meta[$i]->meta_key, $order_item_meta[$i]->meta_value ); break; } } } unset( $order_item_meta ); if( $order_items[$key]->type == 'fee' ) $order_items[$key]->quantity = 1; $order_items[$key] = apply_filters( 'woo_ce_order_item', $order_items[$key], $order_id ); $order_items[$key]->type = woo_ce_format_order_item_type( $order_items[$key]->type ); } return $order_items; } } }
function woo_ce_get_product_tags( $args = array() ) { $term_taxonomy = 'product_tag'; $defaults = array( 'orderby' => 'name', 'order' => 'ASC', 'hide_empty' => 0 ); $args = wp_parse_args( $args, $defaults ); // Allow other developers to bake in their own filters $args = apply_filters( 'woo_ce_get_product_tags_args', $args ); $tags = get_terms( $term_taxonomy, $args ); if( !empty( $tags ) && is_wp_error( $tags ) == false ) { $size = count( $tags ); for( $i = 0; $i < $size; $i++ ) { $tags[$i]->description = woo_ce_format_description_excerpt( $tags[$i]->description ); $tags[$i]->disabled = 0; if( $tags[$i]->count == 0 ) $tags[$i]->disabled = 1; } return $tags; } }
function woo_ce_get_product_data( $product_id = 0, $args = array(), $fields = array() ) { // Get Product defaults $weight_unit = get_option( 'woocommerce_weight_unit' ); $dimension_unit = get_option( 'woocommerce_dimension_unit' ); $height_unit = $dimension_unit; $width_unit = $dimension_unit; $length_unit = $dimension_unit; $product = get_post( $product_id ); $_product = ( function_exists( 'wc_get_product' ) ? wc_get_product( $product_id ) : false ); $product->parent_id = ''; $product->parent_sku = ''; if( $product->post_type == 'product_variation' ) { // Assign Parent ID for Variants then check if Parent exists if( $product->parent_id = $product->post_parent ) $product->parent_sku = get_post_meta( $product->post_parent, '_sku', true ); else $product->parent_id = ''; } $product->product_id = $product_id; $product->sku = get_post_meta( $product_id, '_sku', true ); $product->name = get_the_title( $product_id ); if( $product->post_type <> 'product_variation' ) $product->permalink = get_permalink( $product_id ); $product->product_url = ( method_exists( $_product, 'get_permalink' ) ? $_product->get_permalink() : get_permalink( $product_id ) ); $product->slug = $product->post_name; $product->description = woo_ce_format_description_excerpt( $product->post_content ); $product->excerpt = woo_ce_format_description_excerpt( $product->post_excerpt ); $product->price = get_post_meta( $product_id, '_regular_price', true ); $product->sale_price = get_post_meta( $product_id, '_sale_price', true ); // Check if we're dealing with a Variable Product Type $term_taxonomy = 'product_type'; if( has_term( 'variable', $term_taxonomy, $product_id ) ) $product->price = get_post_meta( $product_id, '_price', true ); if( isset( $product->price ) && $product->price != '' ) $product->price = woo_ce_format_price( $product->price ); if( isset( $product->sale_price ) && $product->sale_price != '' ) $product->sale_price = woo_ce_format_price( $product->sale_price ); $product->sale_price_dates_from = woo_ce_format_product_sale_price_dates( get_post_meta( $product_id, '_sale_price_dates_from', true ) ); $product->sale_price_dates_to = woo_ce_format_product_sale_price_dates( get_post_meta( $product_id, '_sale_price_dates_to', true ) ); $product->post_date = woo_ce_format_date( $product->post_date ); $product->post_modified = woo_ce_format_date( $product->post_modified ); $product->type = woo_ce_get_product_assoc_type( $product_id ); if( $product->post_type == 'product_variation' ) { // Override the Product Type for Variations $product->type = __( 'Variation', 'woo_ce' ); // Override the Description and Excerpt if Variation Formatting is enabled if( woo_ce_get_option( 'variation_formatting', 0 ) ) { $parent = get_post( $product->parent_id ); $product->description = $parent->post_content; $product->excerpt = $parent->post_excerpt; unset( $parent ); } } $product->visibility = woo_ce_format_product_visibility( get_post_meta( $product_id, '_visibility', true ) ); $product->featured = woo_ce_format_switch( get_post_meta( $product_id, '_featured', true ) ); $product->virtual = woo_ce_format_switch( get_post_meta( $product_id, '_virtual', true ) ); $product->downloadable = woo_ce_format_switch( get_post_meta( $product_id, '_downloadable', true ) ); $product->weight = get_post_meta( $product_id, '_weight', true ); $product->weight_unit = ( $product->weight != '' ? $weight_unit : '' ); $product->height = get_post_meta( $product_id, '_height', true ); $product->height_unit = ( $product->height != '' ? $height_unit : '' ); $product->width = get_post_meta( $product_id, '_width', true ); $product->width_unit = ( $product->width != '' ? $width_unit : '' ); $product->length = get_post_meta( $product_id, '_length', true ); $product->length_unit = ( $product->length != '' ? $length_unit : '' ); $product->category = woo_ce_get_product_assoc_categories( $product_id, $product->parent_id ); $product->tag = woo_ce_get_product_assoc_tags( $product_id ); $product->manage_stock = woo_ce_format_switch( get_post_meta( $product_id, '_manage_stock', true ) ); $product->allow_backorders = woo_ce_format_switch( get_post_meta( $product_id, '_backorders', true ) ); $product->sold_individually = woo_ce_format_switch( get_post_meta( $product_id, '_sold_individually', true ) ); $product->total_sales = get_post_meta( $product_id, 'total_sales', true ); $product->upsell_ids = woo_ce_get_product_assoc_upsell_ids( $product_id ); $product->crosssell_ids = woo_ce_get_product_assoc_crosssell_ids( $product_id ); $product->quantity = get_post_meta( $product_id, '_stock', true ); $product->quantity = ( function_exists( 'wc_stock_amount' ) ? wc_stock_amount( $product->quantity ) : $product->quantity ); $product->stock_status = woo_ce_format_product_stock_status( get_post_meta( $product_id, '_stock_status', true ), $product->quantity ); $product->image = woo_ce_get_product_assoc_featured_image( $product_id, $product->parent_id ); $product->image_thumbnail = woo_ce_get_product_assoc_featured_image( $product_id, $product->parent_id, 'thumbnail' ); $product->product_gallery = woo_ce_get_product_assoc_product_gallery( $product_id ); $product->product_gallery_thumbnail = woo_ce_get_product_assoc_product_gallery( $product_id, 'thumbnail' ); $product->tax_status = woo_ce_format_product_tax_status( get_post_meta( $product_id, '_tax_status', true ) ); $product->tax_class = woo_ce_format_product_tax_class( get_post_meta( $product_id, '_tax_class', true ) ); $product->shipping_class = woo_ce_get_product_assoc_shipping_class( $product_id ); $product->external_url = get_post_meta( $product_id, '_product_url', true ); $product->button_text = get_post_meta( $product_id, '_button_text', true ); $product->download_file_path = woo_ce_get_product_assoc_download_files( $product_id, 'url' ); $product->download_file_name = woo_ce_get_product_assoc_download_files( $product_id, 'name' ); $product->download_limit = get_post_meta( $product_id, '_download_limit', true ); $product->download_expiry = get_post_meta( $product_id, '_download_expiry', true ); $product->download_type = woo_ce_format_product_download_type( get_post_meta( $product_id, '_download_type', true ) ); $product->purchase_note = get_post_meta( $product_id, '_purchase_note', true ); $product->product_status = woo_ce_format_post_status( $product->post_status ); $product->enable_reviews = woo_ce_format_comment_status( $product->comment_status ); $product->menu_order = $product->menu_order; // Attributes if( $attributes = woo_ce_get_product_attributes() ) { // Scan for global Attributes first if( $product->post_type == 'product_variation' ) { // We're dealing with a single Variation, strap yourself in. foreach( $attributes as $attribute ) { $attribute_value = get_post_meta( $product_id, sprintf( 'attribute_pa_%s', $attribute->attribute_name ), true ); if( !empty( $attribute_value ) ) { $term_id = term_exists( $attribute_value, sprintf( 'pa_%s', $attribute->attribute_name ) ); if( $term_id !== 0 && $term_id !== null && !is_wp_error( $term_id ) ) { $term = get_term( $term_id['term_id'], sprintf( 'pa_%s', $attribute->attribute_name ) ); $attribute_value = $term->name; unset( $term ); } unset( $term_id ); } $product->{'attribute_' . $attribute->attribute_name} = $attribute_value; unset( $attribute_value ); } } else { // Either the Variation Parent or a Simple Product, scan for global and custom Attributes $product->attributes = maybe_unserialize( get_post_meta( $product_id, '_product_attributes', true ) ); if( !empty( $product->attributes ) ) { $default_attributes = maybe_unserialize( get_post_meta( $product_id, '_default_attributes', true ) ); $product->default_attributes = ''; // Check for taxonomy-based attributes foreach( $attributes as $attribute ) { if( !empty( $default_attributes ) && is_array( $default_attributes ) ) { if( array_key_exists( 'pa_' . $attribute->attribute_name, $default_attributes ) ) $product->default_attributes .= $attribute->attribute_label . ': ' . $default_attributes['pa_' . $attribute->attribute_name] . "|"; } if( isset( $product->attributes['pa_' . $attribute->attribute_name] ) ) $product->{'attribute_' . $attribute->attribute_name} = woo_ce_get_product_assoc_attributes( $product_id, $product->attributes['pa_' . $attribute->attribute_name], 'product' ); else $product->{'attribute_' . $attribute->attribute_name} = woo_ce_get_product_assoc_attributes( $product_id, $attribute, 'global' ); } // Check for per-Product attributes (custom) foreach( $product->attributes as $key => $attribute ) { if( $attribute['is_taxonomy'] == 0 ) { if( !isset( $product->{'attribute_' . $key} ) ) $product->{'attribute_' . $key} = $attribute['value']; } } if( !empty( $product->default_attributes ) ) $product->default_attributes = substr( $product->default_attributes, 0, -1 ); } } } // Allow Plugin/Theme authors to add support for additional Product columns $product = apply_filters( 'woo_ce_product_item', $product, $product_id ); // Trim back the Product just to requested export fields if( !empty( $fields ) ) { $fields = array_merge( $fields, array( 'id', 'ID', 'post_parent', 'filter' ) ); if( !empty( $product ) ) { foreach( $product as $key => $data ) { if( !in_array( $key, $fields ) ) unset( $product->$key ); } } } return $product; }