Пример #1
0
 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);
 }
Пример #2
0
function showOrderColumnsContent($column_name, $postId)
{
    switch ($column_name) {
        case SIMPLE_BASKET_COLUMN_ORDER_SUMM:
            echo simple_basket_custom_fields($postId, __('Summ', 'simple_basket')), ' ', __('USD', 'simple_basket');
            break;
    }
}
 /**
  * Обработка обращения к форме заказа
  */
 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');
         }
     }
 }