-
Notifications
You must be signed in to change notification settings - Fork 18
StockMultiStore
Anatoly Yumashev edited this page Nov 3, 2020
·
1 revision
Решение позволяет указать список складов, по которым мы показываем или скрываем товары в магазине.
Задача и обсуждение тут https://github.com/wpcraft-ru/wooms/issues/362
Простейший вариант установки:
- создаем файлик типа wp-content/mu-plugins/StockFilterByStores.php
- кидаем туда код и меняем список складов в 1 переменной класса
- оно будет сразу работать
либо можно создать файлик в папке wp-content/plugins/StockFilterByStores.php - в этом случае плагин можно включать и отключать
<?php
/*
Plugin Name: WooMS Stock Multi Store
Plugin URI: https://github.com/wpcraft-ru/wooms/issues/362
Description: Обеспечивает синк по множеству складов. Список складов правится в коде.
Version: 1
Author: wpcraft.ru
Author URI: https://wpcraft.ru
*/
/**
* Filter by some stores
*/
class StockFilterByStores
{
/**
* 1. тут пишем список складов через запятую
* 2. опцию в настройках сайта - отключаем
*/
public static $include_stores = "Основной склад, Розничный склад";
public static function init()
{
// tests
// add_action('init', function () {
// if (!isset($_GET['dd'])) {
// return;
// }
// echo '<pre>';
// $check = self::filters_by_store([]);
// var_dump($check);
// die(0);
// });
add_filter('wooms_assortment_sync_filters', [__CLASS__, 'filters_by_store']);
}
/**
* use $filters = apply_filters('wooms_assortment_sync_filters', $filters);
*/
public static function filters_by_store($filters)
{
if($additional_store_hrefs = self::get_additional_stores()){
foreach($additional_store_hrefs as $store_href){
$filters[] = 'stockStore=' . $store_href;
}
}
return $filters;
}
public static function get_additional_stores()
{
if(!$stores_api = get_transient('wooms_stores')){
$stores_api = wooms_request('https://online.moysklad.ru/api/remap/1.2/entity/store/');
set_transient('wooms_stores', $stores_api, MINUTE_IN_SECONDS * 5);
}
$include_stores = array_map('trim', explode(",", self::$include_stores));
if(empty($stores_api['rows'])){
return false;
}
$stores_href_list = [];
foreach($stores_api['rows'] as $row){
if(in_array($row['name'], $include_stores)){
$stores_href_list[] = $row['meta']['href'];
}
}
if(empty($stores_href_list)){
return false;
}
return $stores_href_list;
}
}
StockFilterByStores::init();