我正在尝试开发一个片段,以便在产品售罄 10 天后隐藏缺货产品。
我正在尝试开发一个片段来隐藏 10 天售罄后缺货的产品。
为此,我的灵感来自:
我必须构建一个自定义函数来检查缺货日期。但我没有找到任何存储产品被标记为售罄的日期和时间的值或属性。
是否有现成可用的东西,或者我是否必须先创建一个片段来存储产品被标记为售罄的日期和时间,并使用该信息和 IF 语句来隐藏产品或不基于中间的日子。
add_action('woocommerce_product_query', 'custom_woocommerce_product_query');
function custom_woocommerce_product_query($q)
{
if ( out_of_stock < 10 ())
{
$oos_query = new WP_Query(['meta_query' => [['key' => '_stock_status', 'value' => 'outofstock', 'compare' => '=', ], ], 'post_type' => 'product', 'posts_per_page' => - 1, 'fields' => 'ids', ]);
$exclude_ids = $oos_query->posts;
$q->set('post__not_in', $exclude_ids);
}
}
开箱即用的“无货”通知挂钩
add_filter( 'woocommerce_email_recipient_no_stock', 'change_stock_email_recipient', 10, 2 ); // For No stock notification
如果有人能指出我正确的方向,我会很高兴
答案 0 :(得分:1)
这将隐藏 10 天后缺货的产品。
woocommerce_no_stock
动作挂钩$meta_value
将通过 woocommerce_admin_process_product_object
操作挂钩重置woocommerce_product_query
操作挂钩更改商店查询通过添加到我的答案中的评论标签的解释:
// After stock change events, when the product is without stock
function action_woocommerce_no_stock( $wc_get_product ) {
// Retrieves the date, in localized format.
$date = wp_date( 'Y-m-d' );
// Update meta
$wc_get_product->update_meta_data( '_no_stock_date', $date );
// Save
$wc_get_product->save();
}
add_action( 'woocommerce_no_stock', 'action_woocommerce_no_stock', 10, 1 );
// When product is saved in WooCommerce backend
function action_woocommerce_admin_process_product_object( $product ) {
// Get stock quantity
$stock_quantity = $product->get_stock_quantity();
// Greater than or equal to
if ( $stock_quantity >= 1 ) {
// Get meta value
$no_stock_date = $product->get_meta( '_no_stock_date' );
// NOT empty
if ( ! empty ( $no_stock_date ) ) {
// Update
$product->update_meta_data( '_no_stock_date', '' );
}
}
}
add_action( 'woocommerce_admin_process_product_object', 'action_woocommerce_admin_process_product_object', 10, 1 );
// Change the shop query
function action_woocommerce_product_query( $q, $query ) {
// Returns true when on the product archive page (shop).
if ( is_shop() ) {
// Retrieves the date, in localized format.
$date = wp_date( 'Y-m-d' );
// Date - 10 days
$date = wp_date( 'Y-m-d', strtotime( $date . ' -10 days' ) );
// Get any existing meta query
$meta_query = $q->get( 'meta_query' );
// Define an additional meta query
$meta_query[] = array(
'relation' => 'OR',
array(
'key' => '_no_stock_date',
'value' => $date,
'compare' => '>',
'type' => 'date',
),
array(
'key' => '_no_stock_date',
'compare' => 'NOT EXISTS',
'type' => 'date',
)
);
// Set the new merged meta query
$q->set( 'meta_query', $meta_query );
}
}
add_action( 'woocommerce_product_query', 'action_woocommerce_product_query', 10, 2 );