public function process_product_meta_variable($post_id) { WPLA()->logger->info('process_product_meta_variable() - ' . $post_id); if (!isset($_POST['variable_sku'])) { return; } $variable_post_id = $_POST['variable_post_id']; $variable_amazon_product_id = $_POST['variable_amazon_product_id']; $variable_amazon_id_type = $_POST['variable_amazon_id_type']; $variable_amazon_asin = $_POST['variable_amazon_asin']; $variable_sku = $_POST['variable_sku']; $variable_amazon_price = isset($_POST['variable_amazon_price']) ? $_POST['variable_amazon_price'] : ''; $variable_amazon_minimum_price = isset($_POST['variable_amazon_minimum_price']) ? $_POST['variable_amazon_minimum_price'] : ''; $variable_amazon_maximum_price = isset($_POST['variable_amazon_maximum_price']) ? $_POST['variable_amazon_maximum_price'] : ''; $variable_amazon_condition_type = isset($_POST['variable_amazon_condition_type']) ? $_POST['variable_amazon_condition_type'] : ''; $variable_amazon_condition_note = isset($_POST['variable_amazon_condition_note']) ? $_POST['variable_amazon_condition_note'] : ''; $variable_amazon_is_disabled = isset($_POST['variable_amazon_is_disabled']) ? $_POST['variable_amazon_is_disabled'] : ''; // convert decimal comma for all price fields $variable_amazon_price = str_replace(',', '.', $variable_amazon_price); $variable_amazon_minimum_price = str_replace(',', '.', $variable_amazon_minimum_price); $variable_amazon_maximum_price = str_replace(',', '.', $variable_amazon_maximum_price); $lm = new WPLA_ListingsModel(); $all_variations_with_SKU = array(); $all_variations_with_ASIN = array(); $max_loop = max(array_keys($_POST['variable_post_id'])); for ($i = 0; $i <= $max_loop; $i++) { if (!isset($variable_post_id[$i])) { continue; } $variation_id = (int) $variable_post_id[$i]; // Update post meta update_post_meta($variation_id, '_amazon_product_id', trim($variable_amazon_product_id[$i])); update_post_meta($variation_id, '_amazon_id_type', $variable_amazon_id_type[$i]); update_post_meta($variation_id, '_wpla_asin', trim($variable_amazon_asin[$i])); update_post_meta($variation_id, '_amazon_price', isset($variable_amazon_price[$i]) ? trim($variable_amazon_price[$i]) : ''); update_post_meta($variation_id, '_amazon_minimum_price', isset($variable_amazon_minimum_price[$i]) ? trim($variable_amazon_minimum_price[$i]) : ''); update_post_meta($variation_id, '_amazon_maximum_price', isset($variable_amazon_maximum_price[$i]) ? trim($variable_amazon_maximum_price[$i]) : ''); update_post_meta($variation_id, '_amazon_condition_type', isset($variable_amazon_condition_type[$i]) ? trim($variable_amazon_condition_type[$i]) : ''); update_post_meta($variation_id, '_amazon_condition_note', isset($variable_amazon_condition_note[$i]) ? trim($variable_amazon_condition_note[$i]) : ''); update_post_meta($variation_id, '_amazon_is_disabled', isset($variable_amazon_is_disabled[$i]) ? $variable_amazon_is_disabled[$i] : ''); // if ( $variable_amazon_product_id[$i] !== 'parent' ) // update_post_meta( $variation_id, '_amazon_product_id', $variable_amazon_product_id[$i] ); // else // delete_post_meta( $variation_id, '_amazon_product_id' ); // update min/max prices in listings table if (isset($_POST['variable_amazon_minimum_price'])) { $min_price = isset($variable_amazon_minimum_price[$i]) ? $variable_amazon_minimum_price[$i] : ''; $max_price = isset($variable_amazon_maximum_price[$i]) ? $variable_amazon_maximum_price[$i] : ''; $data = array(); if ($min_price || $max_price) { if ($listing = $lm->getItemByPostID($variation_id)) { if ($min_price != $listing->min_price) { $data['min_price'] = $min_price; $data['pnq_status'] = 1; // mark as changed } if ($max_price != $listing->max_price) { $data['max_price'] = $max_price; $data['pnq_status'] = 1; // mark as changed } // update listing if (!empty($data)) { $lm->updateWhere(array('id' => $listing->id), $data); } } } } // collect (matched) variations with ASIN if ($variable_amazon_asin[$i]) { $all_variations_with_ASIN[$variation_id] = $variable_amazon_asin[$i]; } // collect all variations with SKU if ($variable_sku[$i]) { $all_variations_with_SKU[$variation_id] = $variable_sku[$i]; } } // each variation WPLA()->logger->info('Variations with ASIN: ' . print_r($all_variations_with_ASIN, 1)); WPLA()->logger->info('Variations with SKU : ' . print_r($all_variations_with_SKU, 1)); // process matched variations // check all variations with ASIN and add missing ones to listings table if (!empty($all_variations_with_ASIN)) { $lm = new WPLA_ListingsModel(); $default_account_id = get_option('wpla_default_account_id', 1); if (!$default_account_id) { return; } // *** foreach ($all_variations_with_ASIN as $variation_id => $asin) { // check if this ASIN / ID already exist - skip if it does WPLA()->logger->info("searching for existing listing for #{$variation_id} / {$asin}"); if ($lm->getItemByASIN($asin, false)) { continue; } if ($lm->getItemByPostID($variation_id)) { continue; } WPLA()->logger->info("no listing found for variation #{$variation_id} / {$asin}"); // skip hidden variations if (get_post_meta($variation_id, '_amazon_is_disabled', true) == 'on') { continue; } // insert matched listing $success = $lm->insertMatchedProduct($variation_id, $asin, $default_account_id); $error_msg = isset($lm->lastError) ? $lm->lastError : ''; if ($success) { // TODO: use persistent admin message WPLA()->logger->info("Matched variation #{$variation_id} / {$asin} - {$error_msg}"); } else { echo "Failed to match variation #{$variation_id} - please report this to support: {$error_msg}"; WPLA()->logger->error("Failed to match variation #{$variation_id} / {$asin} - {$error_msg}"); } } // each matched variation } // if $all_variations_with_ASIN // add missing variations // if the parent product has a listing item, then check for and add missing variation listings $lm = new WPLA_ListingsModel(); $parent_listing = $lm->getItemByPostID($post_id); if ($parent_listing) { // get account from parent listing $account = WPLA_AmazonAccount::getAccount($parent_listing->account_id); if (!$account) { return; } foreach ($all_variations_with_SKU as $variation_id => $sku) { // check if this SKU / ID already exist - skip if it does if ($lm->getItemBySKU($sku, false)) { continue; } if ($lm->getItemByPostID($variation_id)) { continue; } WPLA()->logger->info("no listing found for missing variation #{$variation_id} / {$sku}"); // check if this variation has a UPC/EAN set - skip if empty (unless brand registry is enabled) $_amazon_product_id = get_post_meta($variation_id, '_amazon_product_id', true); if (!$_amazon_product_id && !$account->is_reg_brand) { continue; } // skip hidden variations if (get_post_meta($variation_id, '_amazon_is_disabled', true) == 'on') { continue; } // insert variation listing $success = $lm->insertMissingVariation($variation_id, $sku, $parent_listing); $error_msg = isset($lm->lastError) ? $lm->lastError : ''; if ($success) { // TODO: use persistent admin message WPLA()->logger->info("Matched missing variation #{$variation_id} / {$sku} - {$error_msg}"); } else { echo "Failed to match missing variation #{$variation_id} - please report this to support: {$error_msg}"; WPLA()->logger->error("Failed to match missing variation #{$variation_id} / {$sku} - {$error_msg}"); } } // each variation } // if parent listing exists }
public function matchAllUnlistedWithASIN() { global $wpdb; $items = $wpdb->get_results("\n SELECT \n \tpm.meta_value as ASIN,\n \tp.ID, p.post_title, p.post_type, p.post_modified,\n \ta.sku, a.id\n FROM {$wpdb->postmeta} pm\n LEFT JOIN {$wpdb->posts} p ON pm.post_id = p.ID\n LEFT JOIN {$wpdb->prefix}amazon_listings a ON pm.post_id = a.post_id\n\n WHERE p.ID IS NOT NULL\n\t\t\t AND ( p.post_type = 'product' OR p.post_type = 'product_variation' )\n\t\t\t AND pm.meta_key = '_wpla_asin'\n\t\t\t AND pm.meta_value <> ''\n\t\t\t AND a.id IS NULL\n\n ORDER BY pm.post_id\n LIMIT 1000\n\t\t"); // echo "<pre>";print_r($items);echo"</pre>";#die(); $mode = isset($_REQUEST['mode']) ? $_REQUEST['mode'] : false; if ($mode == 'create_listings') { $lm = new WPLA_ListingsModel(); $msg = ''; foreach ($items as $product) { $asin = $product->ASIN; $post_id = $product->ID; $default_account_id = get_option('wpla_default_account_id', 1); $lm->lastError = null; // $lm->last_insert_id = null; $success = $lm->insertMatchedProduct($post_id, $asin, $default_account_id); if ($success) { // $msg .= "Listing {$lm->last_insert_id} was created for ASIN $asin (#$post_id) <br>"; // if ( $lm->lastError ) $msg .= "{$lm->lastError} <br>"; $msg .= "{$lm->lastError} <br>"; } else { $msg .= "<b>Failed to match product: {$lm->lastError} </b><br>"; } } wpla_show_message($msg); return; } // if create_listings if (!empty($items)) { $nonce = wp_create_nonce('wpla_tools_page'); $btn_import = '<a href="admin.php?page=wpla-tools&tab=developer&action=wpla_match_all_unlisted_with_asin&mode=create_listings&_wpnonce=' . $nonce . '" class="button button-small button-primary" >' . 'Create listings' . '</a>'; $buttons = ' ' . $btn_import; wpla_show_message('There are ' . sizeof($items) . ' products(s) that can be matched automatically.' . $buttons, 'info'); } else { wpla_show_message('No products found. All products with ASINs already exist in WP-Lister.'); } }
public function ajax_wpla_match_product() { // TODO: check nonce if (isset($_REQUEST['post_id']) && isset($_REQUEST['asin'])) { $asin = $_REQUEST['asin']; $post_id = $_REQUEST['post_id']; $default_account_id = get_option('wpla_default_account_id', 1); $lm = new WPLA_ListingsModel(); $success = $lm->insertMatchedProduct($post_id, $asin, $default_account_id); // $amazon_listing = WPLA_AmazonMarket::getMarket( $_REQUEST['amazon_listing_id'] ); // $amazon_listing = new WPLA_AmazonMarket( $_REQUEST['amazon_listing_id'] ); // echo "<pre>";print_r($amazon_listing);echo"</pre>"; if ($success) { // store ASIN as product meta update_post_meta($post_id, '_wpla_asin', $asin); // build response $response = new stdClass(); $response->post_id = $post_id; $response->listing_id = isset($lm->last_insert_id) ? $lm->last_insert_id : false; $response->error_msg = isset($lm->lastError) ? $lm->lastError : false; $response->url = 'http://www.amazon.com/dp/' . $asin; $response->success = true; $this->returnJSON($response); exit; } else { if (isset($lm->lastError)) { echo $lm->lastError . "\n"; } echo "Failed to match product!"; } } }