我为WooCommerce创建了一个新插件,提供了一个API,用于同步来自供应商的外部产品数据。整个数据集约为140.000行。就我个人而言,保持数据库整洁很重要,因此我决定将所有数据存储在3个不同的表中。在前端和后端列表中注入数量可以正常工作,在产品编辑页面上的库存选项卡上不起作用!
使用供应商数据从三个表之一中注入产品数量在前端和后端挂接中使用...的表表效果很好。
add_filter( 'woocommerce_product_get_stock_quantity','inject_quantity', 10, 2 );
从数据库中捕获数据并使用此函数返回
function inject_quantity($value,$product) {
$new_value = '5';
return $new_value;
}
如前所述,这在列表表或快速编辑的前端和后端都很好用。
进一步了解woocommerce / includes / admin / meta-boxes / views / html-product-data-inventory.php
woocommerce_wp_text_input(
array(
'id' => '_stock',
'value' => wc_stock_amount( $product_object->get_stock_quantity( 'edit' ) ),
'label' => __( 'Stock quantity', 'woocommerce' ),
'desc_tip' => true,
'description' => __( 'Stock quantity. If this is a variable product this value will be used to control stock for all variations, unless you define stock at variation level.', 'woocommerce' ),
'type' => 'number',
'custom_attributes' => array('step' => 'any',),
'data_type' => 'stock',
)
);
输入字段上的值由...提供。
$product_object->get_stock_quantity( 'edit' );
我们之前迷上的这个函数位于class WC_Product
-> WooCommerce / Abstracts为$context = 'view'
提供数量
/**
* Returns number of items available for sale.
*
* @param string $context What the value is for. Valid values are view and edit.
* @return int|null
*/
public function get_stock_quantity( $context = 'view' ) {
return $this->get_prop( 'stock_quantity', $context );
}
https://docs.woocommerce.com/wc-apidocs/source-class-WC_Product.html#354-362
遵循我在class WC_DATA
上停止的词根
/**
* Prefix for action and filter hooks on data.
*
* @since 3.0.0
* @return string
*/
protected function get_hook_prefix() {
return 'woocommerce_' . $this->object_type . '_get_';
}
/**
* Gets a prop for a getter method.
*
* Gets the value from either current pending changes, or the data itself.
* Context controls what happens to the value before it's returned.
*
* @since 3.0.0
* @param string $prop Name of prop to get.
* @param string $context What the value is for. Valid values are view and edit.
* @return mixed
*/
protected function get_prop( $prop, $context = 'view' ) {
$value = null;
if ( array_key_exists( $prop, $this->data ) ) {
$value = array_key_exists( $prop, $this->changes ) ? $this->changes[ $prop ] : $this->data[ $prop ];
if ( 'view' === $context ) {
$value = apply_filters( $this->get_hook_prefix() . $prop, $value, $this );
}
}
return $value;
}
https://docs.woocommerce.com/wc-apidocs/source-class-WC_Data.html#717-740
因此,似乎没有任何办法可以钩住$context = 'edit'
并在“产品”编辑页“产品目录”标签上的输入字段上重置值?
也许还有其他方法。在产品查询本身上是否注入了数量?