• WooCommerce полезная информация

 #10403   IgorA100
 09 июл 2021, 16:01
Проблема переполнения памяти при работе с wp_insert_post() wp_insert_term() wp_update_post() wp_insert_post()
При импорте сотен и тысяч товаров в Woocommerce происходит переполнение памяти в PHP. Это связано с кешированием всех записей в БД.
Что бы отключить кеширование на время импорт нужно в свой фцнкции или методе использовать следующий код:
Код: Выделить всё// запомним текущее состояние (это пример, что так тоже можно делать)
$was_suspended = wp_suspend_cache_addition();

// отключаем кэширование
wp_suspend_cache_addition( true );

// ТУТ ВАШ КОД ИМПОРТА. Объектное кэширование здесь уже не работает

// вернем прежнее состояние кэша обратно
wp_suspend_cache_addition( $was_suspended );

https://wp-kama.ru/note/problema-perepo ... pamyati-wp
 #10404   IgorA100
 09 июл 2021, 18:30
Ускорение массовых вставок двнных в БД:
Перед массовыми вставками отключите autocommit режим явно:
Код: Выделить всё$wpdb->query( 'SET autocommit = 0;' );

После массовых вставок запустите:
Код: Выделить всё$wpdb->query( 'COMMIT;' );

НО! Это чревато тем, что пока не выполнится команда $wpdb->query( 'COMMIT;' ); данные в БД не запишутся и могут быть утеряны!!!
https://qastack.ru/wordpress/102349/fas ... ta-in-bulk
 #10407   IgorA100
 10 июл 2021, 21:27
Лучший и правильный способ добавить новый столбец в таблицу, если столбец не существует.
Код: Выделить всё/*@ Add status column if not exist */
global $wpdb;
$dbname = $wpdb->dbname;

$marks_table_name = $wpdb->prefix . "wpsp_mark";

 $is_status_col = $wpdb->get_results(  "SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS`    WHERE `table_name` = '{$marks_table_name}' AND `TABLE_SCHEMA` = '{$dbname}' AND `COLUMN_NAME` = 'status'"  );

if( empty($is_status_col) ):
    $add_status_column = "ALTER TABLE `{$marks_table_name}` ADD `status` VARCHAR(50) NULL DEFAULT NULL AFTER `attendance`; ";

    $wpdb->query( $add_status_column );
endif;

https://coderoad.ru/21330932/%D0%94%D0% ... -wordpress
 #10408   IgorA100
 10 июл 2021, 23:45
При использовании 'tax_query' и 'meta_query' выполнять условие "ИЛИ", а не "И"
Код: Выделить всёadd_filter( 'posts_where', 'f1_egpaf_meta_or_tax', PHP_INT_MAX, 2 );
function f1_egpaf_meta_or_tax( $where, \WP_Query $q ) {
     // Get query vars.
     $tax_args = isset( $q->query_vars['tax_query'] ) ? $q->query_vars['tax_query'] : null;
     $meta_args = isset( $q->query_vars['meta_query'] ) ? $q->query_vars['meta_query'] : null;
     $meta_or_tax = isset( $q->query_vars['_meta_or_tax'] ) ? wp_validate_boolean( $q->query_vars['_meta_or_tax'] ) : false;

     // Construct the "tax OR meta" query.
     if ( $meta_or_tax && is_array( $tax_args ) && is_array( $meta_args ) ) {
       global $wpdb;
       // Primary id column.
       $field = 'ID';
       // Tax query.
       $sql_tax = get_tax_sql( $tax_args, $wpdb->posts, $field );
       // Meta query.
       $sql_meta = get_meta_sql( $meta_args, 'post', $wpdb->posts, $field );
       // Modify the 'where' part.
       if ( isset( $sql_meta['where'] ) && isset( $sql_tax['where'] ) ) {
         $where = str_replace(
         [ $sql_meta['where'], $sql_tax['where'] ],
         '',
         $where
         );
         $where .= sprintf(
         ' AND ( %s OR %s ) ',
         substr( trim( $sql_meta['where'] ), 4 ),
         substr( trim( $sql_tax['where'] ), 4 )
         );
       }
     }
     return $where;
}

ИСПОЛЬЗОВАНИЕ:
Добавить в массив аргументов:
'_meta_or_tax'=>true

https://wordpress.stackovernet.xyz/ru/q/71309
 #10410   IgorA100
 11 июл 2021, 22:57
Выбрать все товары из нескольких категорий одновременно.
Код: Выделить всё$sortcolumn = 'ID';
$prod_categories = array(12, 17); //category IDs
$product_args = array(
'numberposts' => -1,
'post_status' => array('publish', 'pending', 'private', 'draft'),
'post_type' => array('product', 'product_variation'), //skip types
'orderby' => $sortcolumn,
'order' => 'ASC',
);

if (!empty($prod_categories)) {
$product_args['tax_query'] = array(
array(
'taxonomy' => 'product_cat',
'field' => 'id',
'terms' => $prod_categories,
'operator' => 'IN',
));
}

$products = get_posts($product_args);
 #10413   IgorA100
 11 июл 2021, 23:29
Хаки для вариаций товаров в WooCommerce
    Вывод минимальной цены для вариаций в магазине (глобальное решение).
    Отображаем минимальную стоимость в разделах.
    Показ цены по умолчанию (в разделах).
    Глюк с одинаковой стоимостью вариантов.
    Вариации без выпадающего списка (с чекбоксами).
    Выполнение jQuery скриптов при выборе вариаций WooCommerce (другой пост).
    Выбор вариантов продукции на странице каталога (другой пост).

http://wordpressinside.ru/woocommerce/v ... -snippets/
 #10414   IgorA100
 12 июл 2021, 00:24
Расширим функционал Woocommerce выбором при оформлении заказа: юр. или физ. лицо.
Естественно данный выбор будет влиять на множество аспектов самого процесса заказа и прочих функций WC.
Создание переключателя и полей для организации

https://opttour.ru/plugins/yur-ili-fiz- ... formlenii/