更改 woocommerce 股票价值的显示
Change the display of woocommerce stock values
我想限制在我的产品页面上显示股票(仅限前端),以限制过高的股票。
我的问题与这篇文章类似:
其中,下面的代码显示了类似的内容,但有几个缺点:
- 它在产品目录页面上显示新库存,而不是直接更换产品页面上的库存
- 它只适用于变量产品而不适用于简单产品
add_action( 'woocommerce_after_shop_loop_item', 'wc_loop_get_product_stock_availability_text', 10 );
function wc_loop_get_product_stock_availability_text() {
global $wpdb, $product;
$max_stock_qty = 50; // Maximum Number of Available Stock qty
// For variable products
if( $product->is_type('variable') ) {
// Get the stock quantity sum of all product variations (children)
$stock_quantity = $wpdb->get_var("
SELECT SUM(pm.meta_value) FROM {$wpdb->prefix}posts as p
JOIN {$wpdb->prefix}postmeta as pm ON p.ID = pm.post_id
WHERE p.post_type = 'product_variation'
AND p.post_status = 'publish' AND p.post_parent = '".get_the_id()."'
AND pm.meta_key = '_stock' AND pm.meta_value IS NOT NULL
");
if ( $stock_quantity > 0 ) {
// Here we limit the sock quantity display to 50 when it's up to 50
$stock_quantity = $stock_quantity >= $max_stock_qty ? $max_stock_qty : $stock_quantity;
echo '<p class="stock in-stock">'. sprintf( __("%s in stock", "woocommerce"), $stock_quantity ).'</p>';
} else {
if ( is_numeric($stock_quantity) )
echo '<p class="stock out-of-stock">' . __("Out of stock", "woocommerce") . '</p>';
else
return;
}
}
// Other products types
else {
echo wc_get_stock_html( $product );
}
}
考虑到以下情况,返回的值应替换产品页面上显示的库存:
- 当一只股票大于50时,显示一个50到100之间的随机数。
- 如果股票少于50,则显示股票的实际价值。
我被卡住了,我不知道我的方向是否正确,
非常感谢!
您可以筛选woocommerce_get_availability_text
并查看库存数量。
add_filter( 'woocommerce_get_availability_text', 'custom_availability_text', 10, 2 );
function custom_availability_text( $availability, $product ) {
if ( ! $product->is_in_stock() ) {
$availability = __( 'Out of stock', 'woocommerce' );
} elseif ( $product->managing_stock() && $product->is_on_backorder( 1 ) ) {
$availability = $product->backorders_require_notification() ? __( 'Available on backorder', 'woocommerce' ) : '';
} elseif ( ! $product->managing_stock() && $product->is_on_backorder( 1 ) ) {
$availability = __( 'Available on backorder', 'woocommerce' );
} elseif ( $product->managing_stock() ) {
$stock_amount = $product->get_stock_quantity();
// Check if Stock is less than 50.
if ( 50 > $stock_amount ) {
$availability = wc_format_stock_for_display( $product );
} else {
if ( false === ( $custom_availability = get_transient( 'custom_availability_text_' . $product->get_id() ) ) ) {
$random = wp_rand( 50, 100 );
$availability = sprintf( __( '%s in stock', 'woocommerce' ), wc_format_stock_quantity_for_display( $random, $product ) );
// Store for 6 hours. YMMV.
set_transient( 'custom_availability_text_' . $product->get_id(), $availability, 6 * HOUR_IN_SECONDS );
} else {
return $custom_availability;
}
}
} else {
$availability = '';
}
return $availability;
}
我更新了答案以包含 6 小时缓存。
我想限制在我的产品页面上显示股票(仅限前端),以限制过高的股票。
我的问题与这篇文章类似:
其中,下面的代码显示了类似的内容,但有几个缺点:
- 它在产品目录页面上显示新库存,而不是直接更换产品页面上的库存
- 它只适用于变量产品而不适用于简单产品
add_action( 'woocommerce_after_shop_loop_item', 'wc_loop_get_product_stock_availability_text', 10 );
function wc_loop_get_product_stock_availability_text() {
global $wpdb, $product;
$max_stock_qty = 50; // Maximum Number of Available Stock qty
// For variable products
if( $product->is_type('variable') ) {
// Get the stock quantity sum of all product variations (children)
$stock_quantity = $wpdb->get_var("
SELECT SUM(pm.meta_value) FROM {$wpdb->prefix}posts as p
JOIN {$wpdb->prefix}postmeta as pm ON p.ID = pm.post_id
WHERE p.post_type = 'product_variation'
AND p.post_status = 'publish' AND p.post_parent = '".get_the_id()."'
AND pm.meta_key = '_stock' AND pm.meta_value IS NOT NULL
");
if ( $stock_quantity > 0 ) {
// Here we limit the sock quantity display to 50 when it's up to 50
$stock_quantity = $stock_quantity >= $max_stock_qty ? $max_stock_qty : $stock_quantity;
echo '<p class="stock in-stock">'. sprintf( __("%s in stock", "woocommerce"), $stock_quantity ).'</p>';
} else {
if ( is_numeric($stock_quantity) )
echo '<p class="stock out-of-stock">' . __("Out of stock", "woocommerce") . '</p>';
else
return;
}
}
// Other products types
else {
echo wc_get_stock_html( $product );
}
}
考虑到以下情况,返回的值应替换产品页面上显示的库存:
- 当一只股票大于50时,显示一个50到100之间的随机数。
- 如果股票少于50,则显示股票的实际价值。
我被卡住了,我不知道我的方向是否正确, 非常感谢!
您可以筛选woocommerce_get_availability_text
并查看库存数量。
add_filter( 'woocommerce_get_availability_text', 'custom_availability_text', 10, 2 );
function custom_availability_text( $availability, $product ) {
if ( ! $product->is_in_stock() ) {
$availability = __( 'Out of stock', 'woocommerce' );
} elseif ( $product->managing_stock() && $product->is_on_backorder( 1 ) ) {
$availability = $product->backorders_require_notification() ? __( 'Available on backorder', 'woocommerce' ) : '';
} elseif ( ! $product->managing_stock() && $product->is_on_backorder( 1 ) ) {
$availability = __( 'Available on backorder', 'woocommerce' );
} elseif ( $product->managing_stock() ) {
$stock_amount = $product->get_stock_quantity();
// Check if Stock is less than 50.
if ( 50 > $stock_amount ) {
$availability = wc_format_stock_for_display( $product );
} else {
if ( false === ( $custom_availability = get_transient( 'custom_availability_text_' . $product->get_id() ) ) ) {
$random = wp_rand( 50, 100 );
$availability = sprintf( __( '%s in stock', 'woocommerce' ), wc_format_stock_quantity_for_display( $random, $product ) );
// Store for 6 hours. YMMV.
set_transient( 'custom_availability_text_' . $product->get_id(), $availability, 6 * HOUR_IN_SECONDS );
} else {
return $custom_availability;
}
}
} else {
$availability = '';
}
return $availability;
}
我更新了答案以包含 6 小时缓存。