public function add() { $this->validateNonce(); if (!isset($_REQUEST['id'])) { die('ID not specified'); } // Код товара $id = (int) $_REQUEST['id']; $product = get_post($id); $title = $product->post_title; // Цена $price = simple_basket_custom_fields($id, get_option('simple_basket_catalog_price')); // Вычисляем категорию по таксономии $category = ''; // Тип записи каталога товара $postType = $product->post_type; // Таксономии записи $taxonomies = get_object_taxonomies($postType); // Ищем таксономию, которая не тег foreach ($taxonomies as $taxonomy) { if (strpos($taxonomy, 'tag') !== FALSE) { continue; } // Берем элементы этой таксономии $categories = get_the_terms($id, $taxonomy); $category = count($categories) > 0 ? $categories[0]->name : ''; // Следующие таксономии не рассматриваем break; } // Добавляем в корзину if (!empty($title)) { $this->basket->add($id, $title, $price, $category); } $this->responce($this->basket); }
/** * Обработка обращения к форме заказа */ public function handle() { // Если пользователь авторизован, пытаемся подставить пустые данные global $current_user; if (is_user_logged_in()) { get_currentuserinfo(); if (empty($this->basket->userName)) { $this->basket->userName = $current_user->display_name; } if (empty($this->basket->userEmail)) { $this->basket->userEmail = $current_user->user_email; } if (empty($this->basket->userPhone)) { $this->basket->userPhone = esc_attr(get_the_author_meta('phone', $current_user->user_ID)); } } // Обработка добавления if (isset($_GET[SIMPLE_BASKET_ADD])) { // Код товара $id = (int) $_GET[SIMPLE_BASKET_ADD]; $product = get_post($id); $title = $product->post_title; // Цена $price = simple_basket_custom_fields($id, get_option('simple_basket_catalog_price')); // Вычисляем категорию по таксономии $category = ''; // Тип записи каталога товара $postType = $product->post_type; // Таксономии записи $taxonomies = get_object_taxonomies($postType); // Ищем таксономию, которая не тег foreach ($taxonomies as $taxonomy) { if (strpos($taxonomy, 'tag') !== FALSE) { continue; } // Берем элементы этой таксономии $categories = get_the_terms($id, $taxonomy); $category = count($categories) > 0 ? $categories[0]->name : ''; // Следующие таксономии не рассматриваем break; } // Добавляем в корзину if (!empty($title)) { $this->basket->add($id, $title, $price, $category); } // Переходим на корзину simple_basket_redirect($this->basketURL); } // Обработка обновления количества товаров if (isset($_POST[SIMPLE_BASKET_MODE]) && $_POST[SIMPLE_BASKET_MODE] == SIMPLE_BASKET_UPDATE) { foreach ($_POST as $key => $value) { if (strpos($key, SIMPLE_BASKET_UPDATE) === 0) { $parts = explode('_', $key); $this->basket->update($parts[1], $value); } } // Переходим на корзину simple_basket_redirect($this->basketURL); } // Обработка нового заказа if (isset($_POST[SIMPLE_BASKET_MODE]) && $_POST[SIMPLE_BASKET_MODE] == SIMPLE_BASKET_CHECKOUT) { // Получение данных $this->basket->setUserData(trim(strip_tags($_POST[self::USER_NAME])), trim(strip_tags($_POST[self::USER_EMAIL])), trim(strip_tags($_POST[self::USER_PHONE])), trim(strip_tags($_POST[self::USER_COMMENT]))); $this->deliveryType = isset($_POST[self::USER_SHIPPING_TYPE]) ? (int) $_POST[self::USER_SHIPPING_TYPE] : 0; // Если данные верны - обрабатываем заказ if ($this->basket->isValid()) { // Ищем пользователя $user = get_user_by('email', $this->basket->userEmail); if (!$user) { // Такого пользователя нет, добавляем! $password = wp_generate_password(12, true); $userId = wp_create_user($this->basket->userEmail, $password, $this->basket->userEmail); } else { $userId = $user->id; } // Обновляем данные о пользователе update_user_meta($userId, 'first_name', $this->basket->userName); update_user_meta($userId, 'phone', $this->basket->userPhone); // Учитываем доставку if ($this->deliveryType > 0) { $deliveryTitle = get_the_title($this->deliveryType); $deliveryPrice = (double) simple_basket_custom_fields($this->deliveryType, __('Cost', 'simple_basket')); $this->basket->add(SIMPLE_BASKET_DELIVERY, $deliveryTitle, $deliveryPrice, __('Delivery', 'simple_basket')); } // Добавляем заказ в таблицу заказов $this->orderId = current_time('Ymd-Hi'); $orderBody = '<p><strong>' . __('Customer', 'simple_basket') . ':</strong> ' . $this->basket->userName . '</p>' . '<p><strong>' . __('E-mail', 'simple_basket') . ':</strong> ' . $this->basket->userEmail . '</p>' . '<p><strong>' . __('Phone', 'simple_basket') . ':</strong> ' . $this->basket->userPhone . '</p>' . '<div>' . $this->basket->getHTML() . '</div>' . '<div>' . $this->basket->userComment . '</div>'; $newOrder = array('post_type' => SIMPLE_BASKET_ORDER_TYPE, 'post_title' => $this->orderId, 'post_content' => $orderBody, 'post_status' => 'publish', 'post_author' => $userId); $postId = wp_insert_post($newOrder); // Устанавливаем статус заказа wp_set_object_terms($postId, __('New', 'simple_basket'), SIMPLE_BASKET_ORDER_STATUS); // Устанавливаем общую стоимость заказа update_post_meta($postId, __('Summ', 'simple_basket'), $this->basket->getTotal()); // Подготовливаем отправку почты add_filter('wp_mail_content_type', 'simple_basket_set_html_content_type'); // Высылаем письма пользователю $userEmail = $this->prepareLetter(self::MAIL_TO_USER); if (!empty($userEmail['body'])) { wp_mail($this->basket->userEmail, $userEmail['subject'], $userEmail['body']); } // Высылаем письма администраторам $adminEmail = $this->prepareLetter(self::MAIL_TO_ADMIN); if (!empty($adminEmail['body'])) { $admins = get_users(array('role' => 'Administrator')); $adminEmails = array(); foreach ($admins as $admin) { $adminEmails[] = $admin->user_email; } wp_mail($adminEmails, $adminEmail['subject'], $adminEmail['body']); } // reset content-type to to avoid conflicts -- http://core.trac.wordpress.org/ticket/23578 remove_filter('wp_mail_content_type', 'simple_basket_set_html_content_type'); } } }