PluginProbe ʕ •ᴥ•ʔ
OttoKit: All-in-One Automation Platform / 1.1.36
OttoKit: All-in-One Automation Platform v1.1.36
1.1.36 1.1.35 1.1.34 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 9 months ago add-customer.php 10 months ago add-emails-to-coupon.php 9 months ago add-order-note.php 11 months ago add-product-attributes.php 9 months ago add-product-to-cart.php 9 months ago add-update-order-custom-fields.php 11 months ago apply-coupon.php 9 months ago check-cart-status.php 9 months ago check-if-order-is-renewal.php 5 months ago create-attribute.php 9 months ago create-bundle-product-order.php 7 months ago create-coupon-code.php 11 months ago create-multi-product-order.php 7 months ago create-new-order.php 11 months ago create-product-variation.php 1 year ago create-product.php 2 days ago create-variable-product.php 2 days ago delete-coupon.php 1 year ago delete-customer.php 9 months ago fetch-coupon-details.php 11 months ago find-orders-by-user-id.php 11 months ago get-all-customers.php 9 months ago get-all-products.php 9 months ago get-customer-by-email.php 9 months ago get-customer-by-id.php 9 months ago get-order-details-by-order-id.php 11 months ago get-order-type-by-order-id.php 5 months ago get-orders-by-email.php 9 months ago get-product-by-id.php 1 year ago list-all-order-notes.php 9 months ago list-all-orders.php 9 months ago remove-product-from-cart.php 9 months ago retrieve-coupons-totals.php 11 months ago retrieve-customers-totals.php 11 months ago retrieve-orders-totals.php 11 months ago retrieve-products-totals.php 11 months ago retrieve-refunds-list.php 11 months ago retrieve-reviews-totals.php 11 months ago retrieve-sales-report.php 11 months ago retrieve-top-sellers-report.php 11 months ago update-product-price.php 9 months ago update-product-stock-quantity.php 9 months ago update-status-of-order.php 11 months ago
create-product.php
271 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 if ( ! filter_var( $image_url, FILTER_VALIDATE_URL ) ) {
227 return false;
228 }
229
230 $response = wp_safe_remote_get( $image_url, [ 'reject_unsafe_urls' => true ] );
231
232 if ( is_wp_error( $response ) ) {
233 return false;
234 }
235
236 $image = wp_remote_retrieve_body( $response );
237
238 if ( empty( $image ) ) {
239 return false;
240 }
241
242 $upload = wp_upload_bits( basename( $image_url ), null, $image );
243
244 if ( $upload['error'] ) {
245 return false;
246 }
247
248 $filename = $upload['file'];
249 $wp_filetype = wp_check_filetype( $filename, null );
250 $attachment = [
251 'post_mime_type' => $wp_filetype['type'],
252 'post_title' => sanitize_file_name( $filename ),
253 'post_content' => '',
254 'post_status' => 'inherit',
255 ];
256
257 $attachment_id = wp_insert_attachment( $attachment, $filename, $post_id );
258
259
260
261 require_once ABSPATH . 'wp-admin/includes/image.php';
262
263 $attach_data = wp_generate_attachment_metadata( $attachment_id, $filename );
264 wp_update_attachment_metadata( $attachment_id, $attach_data );
265
266 return $attachment_id;
267 }
268 }
269
270 CreateProduct::get_instance();
271