wordpress 如何使Woocommerce集团产品无法购买24小时前设置日期基于ACF日期字段?

jjjwad0x  于 2023-01-25  发布在  WordPress
关注(0)|答案(2)|浏览(173)

我想我有一个非常具体的问题。我只在我的WooCommerce商店中对产品进行了分组。使用ACF,我添加了一个新的元字段"日期"。对于上下文,我的主要产品实际上是活动和链接的产品,是人们可以为活动预订的食物选项。然而,人们只能在活动开始前24小时预定食物。这就是为什么我在ACF中添加了日期字段。
我知道有"is_purchasable"的条件,但我完全是新的WooCommerce,甚至不知道从哪里开始写函数,根据ACF日期值,产品不应该在活动前24小时购买了。
有人能帮助我吗?或者给我指一个资源,在那里我可以找到类似的代码,我可以根据自己的需要进行调整。
提前感谢!

wwodge7n

wwodge7n1#

使用ACF插件提供的“get_field”函数获取“date” meta字段的值。它还使用“DateTime”类获取当前日期和时间,并从事件日期中减去24小时以获得截止日期和时间。然后它将当前日期和时间与截止日期和时间进行比较,并设置“purchasable”如果当前日期和时间大于或等于截止日期和时间,则状态为false。
把下面的代码放到主题的functions.php中

add_filter( 'woocommerce_product_is_purchasable', 'my_custom_is_purchasable', 10, 2 );
function my_custom_is_purchasable( $purchasable, $product ) {
    // Get the value of the "date" meta field
    $event_date = get_field('date', $product->get_id());
    // Get the current date and time
    $current_datetime = new DateTime();
    // Get the date and time 24 hours before the event
    $cutoff_datetime = new DateTime($event_date);
    $cutoff_datetime->sub(new DateInterval('PT24H'));
    // Compare the current date and time with the cutoff date and time
    if($current_datetime >= $cutoff_datetime){
        $purchasable = false;
    }
    return $purchasable;
}
jdzmm42g

jdzmm42g2#

我想明白了,下面是适合我的代码:

function unpublish_24h_before() {
// Get all products
$args = array(
    'post_type' => 'product',
    'post_status' => 'publish',
    'posts_per_page' => -1
);
$products = get_posts( $args );

// Check expiration date for each product
foreach ( $products as $product ) {
    $expiration_date = get_field( 'date', $product->ID );
    if ( !empty( $expiration_date ) ) {
        $expiration_date = strtotime( $expiration_date );
        $time_left = $expiration_date - time();
        if ( $time_left <= 24 * 60 * 60 ) {
            // Move the product to the trash
            $product->post_status = 'draft';
        wp_update_post( $product );
        }
    }
}} unpublish_24h_before();

相关问题