$_product_id = get_the_ID();
$cat_ids = wp_get_object_terms( $_product_id, 'cats', array('fields'=>'ids') );
if ( is_array($cat_ids) and count($cat_ids) ) {
$_posts = get_posts( array(
'numberposts' => -1,
'post_type' => 'product',
'tax_query' => array(
array(
'taxonomy' => 'cats',
'field' => 'id',
'terms' => $cat_ids,
'include_children' => true,
)
),
) );
if ( is_array($_posts) and count($_posts) ) {
foreach ($_posts as $_post) {
$_index[] = $_post->ID;
$_posts_ids[$_post->ID] = $_post;
}
$post_index = array_search( $_product_id, $_index );
if ($post_index) {
$_products_ids = array();
$_index_count = count($_index);
if ( isset($_index[$post_index-2]) )
$_products_ids[] = $_index[$post_index-2];
elseif ($post_index-1 == 0)
$_products_ids[] = $_index[$_index_count-1];
else
$_products_ids[] = $_index[$_index_count-2];
if ( isset($_index[$post_index-1]) )
$_products_ids[] = $_index[$post_index-1];
else
$_products_ids[] = $_index[$_index_count-1];
if ( isset($_index[$post_index+1]) )
$_products_ids[] = $_index[$post_index+1];
else
$_products_ids[] = $_index[0];
if ( isset($_index[$post_index+2]) )
$_products_ids[] = $_index[$post_index+2];
elseif ($post_index == $_index_count-1)
$_products_ids[] = $_index[1];
else
$_products_ids[] = $_index[0];
if ( count($_products_ids) ) {
foreach ($_products_ids as $_id) {
if ( is_object($_posts_ids[$_id]) )
$_products[$_id] = $_posts_ids[$_id];
}
}
}
}
}
$_first_product = get_posts( array(
'numberposts' => 1,
'post_type' => 'product',
'category' => $_categories,
'post_status' => 'publish',
//'orderby'=>'menu_order',
'order'=>'ASC',
) );
if ( is_array($_first_product) and count($_first_product) and $_first_product[0]->ID == $_product_id )
$_is_first_product = true;
$telegram = new Telegram\Bot\Api('XXXXXXXXXXXXXXXXXXXX');
$update = $this->telegram->getWebhookUpdates();
$update = json_decode($this->update, true);
$keyboard = Keyboard::make()->inline()->row(Keyboard::inlineButton(['text' => 'One more?','callback_data' => '/random']));
$telegram->editMessageText([
'chat_id' => $update['callback_query']['message']['chat']['id'],
'message_id' => $update['callback_query']['message']['message_id'],
'text' => 'Ответочка',
'reply_markup' => $keyboard,
'parse_mode' => 'markdown',
]);
require_once( dirname(__FILE__) . '/vendor/autoload.php');
use Telegram\Bot\Commands\Command;
use Telegram\Bot\Keyboard\Keyboard;
class TelegaBot {
public $chat = array();
public $chat_id;
public $message;
public $telegram;
public $lastCommand = '';
public $text;
public $reply;
public $keyboard = array();
function __construct()
{
$this->telegram = new Telegram\Bot\Api('XXXXXXXXXXXXXXXXXXXXX');
$this->update = $this->telegram->getWebhookUpdates();
if ( isset($this->update['callback_query'])) {
$this->message = $this->update['callback_query'];
} else {
$this->message = $this->update;
}
$this->chat_id = $this->message['message']['chat']['id'];
$this->text = $this->message["message"]["text"];
if ($this->chat_id) {
$this->chat['username'] = $this->message['message']['from']['username'];
$this->chat['name'] = $this->message['message']['from']['first_name'];
// если передается команда, то запоминаем её
if ( preg_match('|/([a-z0-9_]{3,})|is', $this->text, $buff) and trim($buff[1]) != '') {
$this->lastCommand = $buff[1];
}
// ловин нажатие по кнопке:
if (isset($this->update['callback_query'])) {
if ($this->message['data']) {
$this->lastCommand = $this->message['data'];
}
}
}
if ($this->lastCommand) {
$method = 'cmd_' . $this->lastCommand;
if (method_exists('TGBot', $method)) {
call_user_func(array($this, $method));
} else {
$this->reply = "Что-то не припомню такой команды :=)\n\nПожалуйста, пользуйтесь кнопками в моих сообщениях или если вдруг чувствуете, что я начал подглюкивать сообщите об этом моему разработчику...";
}
}
private function cmd_start()
{
$this->keyboard = [
[
Keyboard::inlineButton(['text' => 'Кнопка 1', 'callback_data' => 'button1']),
Keyboard::inlineButton(['text' => 'Кнопка 2', 'callback_data' => 'button2'])
]
];
return $this->sendMessage();
}
public function cmd_button1()
{
// функционал реакции бота на нажатия кнопки 1
}
public function sendMessage()
{
$data = array(
'chat_id' => chat_id,
'text' => $this->reply,
);
if (count($this->keyboard) and is_array($this->keyboard)) {
$data['reply_markup'] = $this->telegram->replyKeyboardMarkup([
'inline_keyboard' => $this->keyboard,
'resize_keyboard' => true,
'one_time_keyboard' => true,
]);
}
$this->telegram->sendMessage($data);
}
Keyboard::inlineButton(['text' => 'Кнопка 1', 'callback_data' => 'button1']),
if (isset($_POST['isOrder']) && $_POST['isOrder'] == 1) {
$address = array(
'first_name' => $_POST['notes']['domain'],
'last_name' => '',
'company' => $_POST['customer']['company'],
'email' => $_POST['customer']['email'],
'phone' => $_POST['customer']['phone'],
'address_1' => $_POST['customer']['address'],
'address_2' => '',
'city' => $_POST['customer']['city'],
'state' => '',
'postcode' => $_POST['customer']['postalcode'],
'country' => 'NL'
);
$order = wc_create_order();
foreach ($_POST['product_order'] as $productId => $productOrdered) :
$order->add_product( get_product( $productId ), 1 );
endforeach;
$order->set_address( $address, 'billing' );
$order->set_address( $address, 'shipping' );
$order->calculate_totals();
update_post_meta( $order->id, '_payment_method', 'ideal' );
update_post_meta( $order->id, '_payment_method_title', 'iDeal' );
// Store Order ID in session so it can be re-used after payment failure
WC()->session->order_awaiting_payment = $order->id;
// Process Payment
$available_gateways = WC()->payment_gateways->get_available_payment_gateways();
$result = $available_gateways[ 'ideal' ]->process_payment( $order->id );
// Redirect to success/confirmation/payment page
if ( $result['result'] == 'success' ) {
$result = apply_filters( 'woocommerce_payment_successful_result', $result, $order->id );
wp_redirect( $result['redirect'] );
exit;
}
}
register_sidebar(array(
'name' => 'Мой блок',
'before_widget' => '',
'after_widget' => '',
'before_title' => '<div class="title">',
'after_title' => '</div>',
));
<?php dynamic_sidebar("Мой блок"); ?>
<?xml version="1.0" encoding="utf-8"?>
<КоммерческаяИнформация ВерсияСхемы="2.03" ДатаФормирования="2020-01-17">
<Документ>
<Ид>108</Ид>
<Номер>108</Номер>
<Дата>2020-01-17</Дата>
<ХозОперация>Заказ товара</ХозОперация>
<Роль>Продавец</Роль>
<Валюта>руб</Валюта>
<Курс>1</Курс>
<Сумма>140.00</Сумма>
<Контрагенты>
<Контрагент>
<Ид>62E1BAD5-97D9-4A6D-AE51-51DBD6780837</Ид>
<Наименование>New New</Наименование>
<Роль>Покупатель</Роль>
<ПолноеНаименование>New New</ПолноеНаименование>
<Фамилия>New</Фамилия>
<Имя>New</Имя>
<АдресРегистрации>
<Представление>520111, Российская Федерация, Красноярск, Красная</Представление>
<АдресноеПоле>
<Тип>Почтовый индекс</Тип>
<Значение>520111</Значение>
</АдресноеПоле>
<Контакты>
<Контакт>
<Тип>Почта</Тип>
<Значение>new@test.test</Значение>
</Контакт>
<Контакт>
<Тип>Телефон</Тип>
<Значение>+79512111111</Значение>
</Контакт>
</Контакты>
</АдресРегистрации>
<Представители>
<Представитель>
<Контрагент>
<Отношение>Контактное лицо</Отношение>
<Ид>62E1BAD5-97D9-4A6D-AE51-51DBD6780837</Ид>
<Наименование>Покупатель</Наименование>
</Контрагент>
</Представитель>
</Представители>
</Контрагент>
</Контрагенты>
<Время>17:12:09</Время>
<Комментарий/>
<Товары>
<Товар>
<Ид>FF0AB9DD-D3B4-4AC6-9C54-2A4CE415000D</Ид>
<Наименование>Nike "Untouchable" Women's Tank Top</Наименование>
<БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE">шт</БазоваяЕдиница>
<ЦенаЗаЕдиницу>25.00</ЦенаЗаЕдиницу>
<Количество>1</Количество>
<Сумма>25</Сумма>
<ЗначенияРеквизитов>
<ЗначениеРеквизита>
<Наименование>ВидНоменклатуры</Наименование>
<Значение>Товар</Значение>
</ЗначениеРеквизита>
<ЗначениеРеквизита>
<Наименование>ТипНоменклатуры</Наименование>
<Значение>Товар</Значение>
</ЗначениеРеквизита>
</ЗначенияРеквизитов>
</Товар>
</Товары>
<ЗначенияРеквизитов>
<ЗначениеРеквизита>
<Наименование>Статус заказа</Наименование>
<Значение>Принят</Значение>
</ЗначениеРеквизита>
<ЗначениеРеквизита>
<Наименование>Метод оплаты</Наименование>
<Значение>Заказ по телефону</Значение>
</ЗначениеРеквизита>
</ЗначенияРеквизитов>
</Документ>
</КоммерческаяИнформация>
<?php
// $data - это массив передающийся в AJAX-запросе фильтрации товаров
// параметры основного запроса получения товаров для вывода на странице
$args = array(
'post_type' => 'product',
'posts_per_page' => $data['page_count'] ? $data['page_count'] : 16,
'post_status' => 'publish',
'tax_query' => array(
array(
'taxonomy' => 'cats',
'field' => 'term_id',
'terms' => $_cat_id,
)
)
);
// если пагинация
if ( is_numeric($data['page']) ) {
$args['paged'] = (int) $data['page'];
}
$_filter_post_ids = array();
if (count($data['filters'])) { // если выбран хотя бы один фильтр
$args['meta_query'] = array(
'relation' => 'AND',
);
foreach ($data['filters'] as $_filter => $_values) {
// собираем фильтрацию
$args['meta_query'][] = array(
'key' => $_filter,
'value' => (array) $_values,
);
}
// собираем ID всех товаров выбранных в результе фильтрации
$args_filters = $args;
$args_filters['posts_per_page'] = -1;
$_posts = get_posts( $args_filters );
if ( count($_posts) ) {
foreach ($_posts as $_post) {
$_filter_post_ids[] = $_post->ID;
}
$in = " AND `post_id` IN (" . implode(',', $_filter_post_ids) . ')';
}
// получаем массивы значений фильтров для вывода в интерфейсе фильтрации товаров
foreach ($_filters_list as $_filter_name) {
$_filter_values = $wpdb->get_results("SELECT `meta_value`, COUNT(meta_id) AS `counts` FROM `{$wpdb->prefix}postmeta` WHERE `meta_key` = '$_filter_name' AND `meta_value` != ''$in GROUP BY `meta_value`", ARRAY_A);
if (count($_filter_values)) {
foreach ($_filter_values as $_value) {
$_filters_data[$_filter_name][$_value['meta_value']] = $_value['counts'];
}
}
}
}
$wp_query = new WP_Query( $args );
var_dump( setRequest(
'https://XXX.XXX.XXX.XXX:8443/api/v2/cli/autoresponder/call',
array(
'X-API-Key: c1986243-c4b7-0fc3-d543-67u9ad3a000a',
),
array(
'params'=> array(
'--update',
'-mail',
'administrator@mydomen.ru',
'-status',
'true',
'-subject',
'Re: this subject text',
'-text',
'This is text email message!',
),
)
) );