codelight/woocommerce-product-variation-stock-cache

此包最新版本(v1.0)没有可用的许可证信息。

v1.0 2019-03-06 21:41 UTC

This package is auto-updated.

Last update: 2024-09-07 16:13:52 UTC


README

此库提供了一种通过属性和库存状态过滤可变产品的方法。

WooCommerce目前没有按属性查询产品并仅显示具有给定属性且库存充足的可变产品的功能。有关详细信息,请查看github问题。此功能计划在v4.0中发布,预计2019年左右发布,但尚无确切信息。

在此之前,您可以使用此库作为相对简单的解决方案,这不会对性能产生太大影响。

工作原理

该库跟踪每个可变产品在父产品帖子元数据中的库存状态。

假设您有一个名为“Size”的属性,其值如下:“S”、“M”、“L”。该库将库存状态存储在父帖子元数据中,如下所示

'_codelight_stock_pa_size:s' => 'instock'
'_codelight_stock_pa_size:m' => 'instock'
'_codelight_stock_pa_size:l' => 'instock'

这允许您使用简单的元查询来获取具有特定属性的库存充足的可变父产品。

安装

composer require codelight/woocommerce-product-variation-stock-cache

库将自动初始化并开始跟踪库存状态变化。要为现有产品生成缓存,请参阅以下内容。

使用方法

在您的WP_Query中检索产品时,请使用以下元查询

<?php

$args['meta_query'][] = [
    'key'   => Cache::getInstance()->getCacheKey(['attribute_name' => 'attribute_value']),
    'value' => 'instock',
];

例如

<?php

$args['meta_query'][] = [
    'key'   => Cache::getInstance()->getCacheKey(['pa_size' => 'm']),
    'value' => 'instock',
];

请注意,attribute_value是属性的别名,而不是可读的值。

多维度可变属性

该库还支持多维度可变属性。假设除了“Size”属性外,您还有“Color”:红色和蓝色。在这种情况下,将创建以下缓存键的幂集

'_codelight_stock_pa_size:s' => 'instock'
'_codelight_stock_pa_size:m' => 'instock'
'_codelight_stock_pa_size:l' => 'instock'
'_codelight_stock_pa_color:red' => 'instock'
'_codelight_stock_pa_color:blue' => 'instock'
'_codelight_stock_pa_color:red_pa_size:s' => 'instock'
'_codelight_stock_pa_color:red_pa_size:m' => 'instock'
'_codelight_stock_pa_color:red_pa_size:l' => 'instock'
'_codelight_stock_pa_color:blue_pa_size:s' => 'instock'
'_codelight_stock_pa_color:blue_pa_size:m' => 'instock'
'_codelight_stock_pa_color:blue_pa_size:l' => 'instock'

拥有幂集允许您按任何单个属性或属性的组合进行筛选,在这种情况下

  • 只有大小
  • 只有颜色
  • 大小和颜色

以下示例将按大小和颜色进行筛选

<?php

$args['meta_query'][] = [
    'key'   => Cache::getInstance()->getCacheKey(['pa_size' => 'm', 'pa_color' => 'red']),
    'value' => 'instock',
];

请注意,如果您有很多属性,此库不是一个好的解决方案。随着属性的增加,帖子元数据字段的数量呈指数增长,这将影响您的性能。但是,即使缓存键非常长,它仍然可以正常工作 - 如果缓存键超过允许的255个字符,则将使用md5哈希值。

生成初始缓存

如果您需要为现有产品初始化缓存

  1. 以(超级)管理员身份登录
  2. 将以下查询字符串附加到任何URL:codelight_prime_cache=1
  3. 您不会看到任何发生,但缓存将被初始化。

请注意,这将尝试在一次请求中处理所有产品,因此如果您有很多产品,这可能会超时并崩溃。
批量初始化和适当的CLI命令已在待办事项列表中,欢迎提供帮助。

自定义

忽略属性

默认情况下,将使用所有产品属性生成缓存。如果您只想使用特定属性

<?php
add_filter('codelight/variation_stock/tracked_attributes', function(array $attributes) {
  // modify your attributes here
  return $attributes;
});

更改帖子元数据键前缀

默认前缀是_codelight_stock。要更改它

<?php
add_filter('codelight/variation_stock/key_prefix', function() {
  return '_custom_prefix';
});

禁用自动初始化库

库会自动运行,并在'after_setup_theme'上自动设置钩子。如果您想更改它

<?php
add_filter('codelight/variation_stock/autoload', function() {
  return false;
});

贡献

任何帮助都受欢迎!

关于

本库自豪地由位于欧盟爱沙尼亚的Codelight网络开发公司提供。