PluginProbe ʕ •ᴥ•ʔ
OttoKit: All-in-One Automation Platform / 1.1.32
OttoKit: All-in-One Automation Platform v1.1.32
1.1.33 1.1.32 1.1.31 1.1.30 1.1.29 1.1.28 1.1.27 1.1.9 trunk 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.19 1.0.20 1.0.21 1.0.22 1.0.23 1.0.24 1.0.25 1.0.26 1.0.27 1.0.28 1.0.29 1.0.30 1.0.31 1.0.32 1.0.33 1.0.34 1.0.35 1.0.36 1.0.37 1.0.38 1.0.39 1.0.40 1.0.41 1.0.42 1.0.43 1.0.44 1.0.45 1.0.46 1.0.47 1.0.48 1.0.49 1.0.50 1.0.51 1.0.52 1.0.53 1.0.54 1.0.55 1.0.56 1.0.57 1.0.58 1.0.59 1.0.60 1.0.61 1.0.62 1.0.63 1.0.64 1.0.65 1.0.66 1.0.67 1.0.68 1.0.69 1.0.7 1.0.70 1.0.71 1.0.72 1.0.73 1.0.74 1.0.75 1.0.76 1.0.77 1.0.78 1.0.79 1.0.8 1.0.80 1.0.81 1.0.82 1.0.83 1.0.84 1.0.85 1.0.86 1.0.87 1.0.88 1.0.89 1.0.9 1.0.90 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.20 1.1.21 1.1.22 1.1.23 1.1.24 1.1.25 1.1.26 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8
suretriggers / src / Integrations / woocommerce / actions / create-product.php
suretriggers / src / Integrations / woocommerce / actions Last commit date
add-attribute-terms.php 8 months ago add-customer.php 9 months ago add-emails-to-coupon.php 8 months ago add-order-note.php 10 months ago add-product-attributes.php 8 months ago add-product-to-cart.php 8 months ago add-update-order-custom-fields.php 10 months ago apply-coupon.php 8 months ago check-cart-status.php 8 months ago check-if-order-is-renewal.php 4 months ago create-attribute.php 8 months ago create-bundle-product-order.php 6 months ago create-coupon-code.php 10 months ago create-multi-product-order.php 7 months ago create-new-order.php 10 months ago create-product-variation.php 1 year ago create-product.php 1 year ago create-variable-product.php 8 months ago delete-coupon.php 1 year ago delete-customer.php 8 months ago fetch-coupon-details.php 10 months ago find-orders-by-user-id.php 10 months ago get-all-customers.php 8 months ago get-all-products.php 8 months ago get-customer-by-email.php 8 months ago get-customer-by-id.php 8 months ago get-order-details-by-order-id.php 10 months ago get-order-type-by-order-id.php 4 months ago get-orders-by-email.php 8 months ago get-product-by-id.php 1 year ago list-all-order-notes.php 8 months ago list-all-orders.php 8 months ago remove-product-from-cart.php 8 months ago retrieve-coupons-totals.php 10 months ago retrieve-customers-totals.php 10 months ago retrieve-orders-totals.php 10 months ago retrieve-products-totals.php 10 months ago retrieve-refunds-list.php 10 months ago retrieve-reviews-totals.php 10 months ago retrieve-sales-report.php 10 months ago retrieve-top-sellers-report.php 10 months ago update-product-price.php 8 months ago update-product-stock-quantity.php 8 months ago update-status-of-order.php 10 months ago
create-product.php
262 lines
1 <?php
2 /**
3 * CreateProduct.
4 * php version 5.6
5 *
6 * @category CreateProduct
7 * @package SureTriggers
8 * @author BSF <username@example.com>
9 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
10 * @link https://www.brainstormforce.com/
11 * @since 1.0.0
12 */
13
14 namespace SureTriggers\Integrations\Woocommerce\Actions;
15
16 use Exception;
17 use SureTriggers\Integrations\AutomateAction;
18 use SureTriggers\Traits\SingletonLoader;
19 use WP_Error;
20 use WC_Product_Simple;
21
22 /**
23 * CreateProduct
24 *
25 * @category CreateProduct
26 * @package SureTriggers
27 * @author BSF <username@example.com>
28 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
29 * @link https://www.brainstormforce.com/
30 * @since 1.0.0
31 */
32 class CreateProduct extends AutomateAction {
33
34 use SingletonLoader;
35
36 /**
37 * Integration type.
38 *
39 * @var string
40 */
41 public $integration = 'WooCommerce';
42
43 /**
44 * Action name.
45 *
46 * @var string
47 */
48 public $action = 'wc_create_product';
49
50 /**
51 * Register the action.
52 *
53 * @param array $actions Actions array.
54 * @return array
55 */
56 public function register( $actions ) {
57 $actions[ $this->integration ][ $this->action ] = [
58 'label' => __( 'Create Product in WooCommerce', 'suretriggers' ),
59 'action' => $this->action,
60 'function' => [ $this, 'action_listener' ],
61 ];
62
63 return $actions;
64 }
65
66 /**
67 * Action listener.
68 *
69 * @param int $user_id User ID.
70 * @param int $automation_id Automation ID.
71 * @param array $fields Fields.
72 * @param array $selected_options Selected options.
73 * @return array|WP_Error
74 * @throws Exception If WooCommerce or WordPress functions are missing.
75 */
76 public function _action_listener( $user_id, $automation_id, $fields, $selected_options ) {
77 if ( ! function_exists( 'wc_get_product' ) || ! function_exists( 'wp_insert_post' ) ) {
78 return [
79 'message' => 'Required functions not available.',
80 ];
81 }
82
83 $post_id = wp_insert_post(
84 [
85 'post_title' => $selected_options['product_name'],
86 'post_content' => $selected_options['product_description'],
87 'post_excerpt' => $selected_options['product_short_description'],
88 'post_status' => $selected_options['product_status'],
89 'post_name' => $selected_options['product_slug'],
90 'post_type' => 'product',
91 'comment_status' => $selected_options['enable_reviews'],
92 ]
93 );
94
95 if ( ! $post_id || $post_id <= 0 ) {
96 return [
97 'message' => 'Failed to create the product.',
98 ];
99 }
100 $result = wp_set_object_terms( $post_id, 'simple', 'product_type' );
101
102 if ( ! is_array( $result ) ) {
103 return [
104 'message' => 'Failed to assign product type.',
105 ];
106 }
107
108 update_post_meta( $post_id, '_visibility', $selected_options['catalog_visibility'] );
109 update_post_meta( $post_id, '_stock_status', $selected_options['stock_status'] );
110 update_post_meta( $post_id, 'catalog_visibility', $selected_options['catalog_visibility'] );
111 update_post_meta( $post_id, '_sku', $selected_options['product_sku'] );
112 update_post_meta( $post_id, '_manage_stock', $selected_options['manage_stock'] );
113 update_post_meta( $post_id, '_stock', $selected_options['stock_quantity'] );
114 update_post_meta( $post_id, '_product_url', $selected_options['external_url'] );
115
116 $product = wc_get_product( $post_id );
117
118 if ( ! $product ) {
119 return new WP_Error( 'product_not_found', __( 'Failed to get the product.', 'suretriggers' ) );
120 }
121 $product->set_props(
122 [
123 'regular_price' => wc_format_decimal( $selected_options['regular_price'] ),
124 'sale_price' => isset( $selected_options['sale_price'] ) ? wc_format_decimal( $selected_options['sale_price'] ) : '',
125 'length' => isset( $selected_options['length'] ) ? $selected_options['length'] : '',
126 'width' => isset( $selected_options['width'] ) ? $selected_options['width'] : '',
127 'height' => isset( $selected_options['height'] ) ? $selected_options['height'] : '',
128 'weight' => isset( $selected_options['weight'] ) ? $selected_options['weight'] : '',
129 ]
130 );
131
132 $product->save();
133
134 // Featured image.
135 if ( ! empty( $selected_options['product_featured_image'] ) ) {
136 $attachment_id = $this->upload_image_from_url( $selected_options['product_featured_image'], $post_id );
137 if ( $attachment_id ) {
138 set_post_thumbnail( $post_id, $attachment_id );
139 }
140 }
141
142 // Gallery images.
143 if ( ! empty( $selected_options['product_gallery_images'] ) ) {
144 $gallery_urls = explode( ',', $selected_options['product_gallery_images'] );
145 $attachment_ids = [];
146
147 foreach ( $gallery_urls as $url ) {
148 $attachment_id = $this->upload_image_from_url( trim( $url ), $post_id );
149 if ( $attachment_id ) {
150 $attachment_ids[] = $attachment_id;
151 }
152 }
153
154 if ( ! empty( $attachment_ids ) ) {
155 update_post_meta( $post_id, '_product_image_gallery', implode( ',', $attachment_ids ) );
156 }
157 }
158
159 // Categories and tags.
160 if ( ! empty( $selected_options['category_ids'] ) ) {
161 $category_ids = $selected_options['category_ids'];
162
163 if ( is_string( $category_ids ) ) {
164 $category_ids = array_map( 'intval', explode( ',', $category_ids ) );
165 } elseif ( is_array( $category_ids ) ) {
166 $category_ids = array_map(
167 function( $item ) {
168 return isset( $item['value'] ) ? intval( $item['value'] ) : 0;
169 },
170 $category_ids
171 );
172
173 $category_ids = array_filter( $category_ids );
174 }
175
176 if ( ! empty( $category_ids ) ) {
177 wp_set_object_terms( $post_id, $category_ids, 'product_cat' );
178 }
179 }
180
181 if ( ! empty( $selected_options['tag_ids'] ) ) {
182 $tag_ids = $selected_options['tag_ids'];
183
184 if ( is_string( $tag_ids ) ) {
185 $tag_ids = array_map( 'intval', explode( ',', $tag_ids ) );
186 } elseif ( is_array( $tag_ids ) ) {
187 $tag_ids = array_map(
188 function( $item ) {
189 return isset( $item['value'] ) ? intval( $item['value'] ) : 0;
190 },
191 $tag_ids
192 );
193
194 $tag_ids = array_filter( $tag_ids );
195 }
196
197 if ( ! empty( $tag_ids ) ) {
198 wp_set_object_terms( $post_id, $tag_ids, 'product_tag' );
199 }
200 }
201
202 // Brand support.
203 if ( ! empty( $selected_options['product_brand'] ) ) {
204 $brand = $selected_options['product_brand'];
205 wp_set_object_terms( $post_id, [ $brand ], 'product_brand' );
206 }
207
208 wc_delete_product_transients( $post_id );
209 wc_update_product_lookup_tables();
210
211 return [
212 'product_id' => $post_id,
213 'title' => get_the_title( $post_id ),
214 'url' => get_permalink( $post_id ),
215 ];
216 }
217
218 /**
219 * Upload image from URL.
220 *
221 * @param string $image_url Image URL.
222 * @param int $post_id Post ID.
223 * @return int|false Attachment ID or false on failure.
224 */
225 private function upload_image_from_url( $image_url, $post_id ) {
226 $response = wp_remote_get( $image_url );
227 $image = wp_remote_retrieve_body( $response );
228
229 if ( empty( $image ) ) {
230 return false;
231 }
232
233 $upload = wp_upload_bits( basename( $image_url ), null, $image );
234
235 if ( $upload['error'] ) {
236 return false;
237 }
238
239 $filename = $upload['file'];
240 $wp_filetype = wp_check_filetype( $filename, null );
241 $attachment = [
242 'post_mime_type' => $wp_filetype['type'],
243 'post_title' => sanitize_file_name( $filename ),
244 'post_content' => '',
245 'post_status' => 'inherit',
246 ];
247
248 $attachment_id = wp_insert_attachment( $attachment, $filename, $post_id );
249
250
251
252 require_once ABSPATH . 'wp-admin/includes/image.php';
253
254 $attach_data = wp_generate_attachment_metadata( $attachment_id, $filename );
255 wp_update_attachment_metadata( $attachment_id, $attach_data );
256
257 return $attachment_id;
258 }
259 }
260
261 CreateProduct::get_instance();
262