以编程方式添加和删除WooCommerce产品类别

时间:2020-09-25 作者:Leanne

我在woocommerce有一个现有的产品类别,名为“whats new”,ID为35。我想以编程的方式将所有(现有和新的)不到30天的产品添加到该类别中,而无需全部检查和勾选。

然后,超过30天的任何产品都会自动删除该类别。

我觉得在WordPress中一定有一种方法可以做到这一点,但由于某些原因,这很难做到,我正在绕圈子。

我有以下代码,这基本上就是我想要实现的。时间函数起作用,但添加和删除对象类别不起作用:

    $product = wc_get_product($id);

    global $product;

    $datetime_created  = $product->get_date_created(); 
    $timestamp_created = $datetime_created->getTimestamp();
    $datetime_now      = new WC_DateTime();
    $timestamp_now     = $datetime_now->getTimestamp();
    $time_delta        = $timestamp_now - $timestamp_created;
    $sixty_days        = 60 * 24 * 60 * 60;

    $cat_ids = array( 35 );

    if ( $time_delta < $sixty_days ) {
        // NEW PRODUCT - add \'whats-new\' category
        wp_set_object_terms( $product_id, $cat_ids, \'product_cat\', true );
    } elseif ( $time_delta > $sixty_days ) {
        // OLD PRODUCT - remove \'whats-new\' category
        wp_remove_object_terms( $product_id, $cat_ids, \'product_cat\', true );
    }

1 个回复
SO网友:Jasper B

将以下代码添加到自定义插件

将类别添加到新产品

function set_new_product_cat( $post_id, $post, $update ) {
    if("product" === $post->post_type){
        // Exit out as we are updating an existing product 
        if ( $update ) {
            return;
        }
        
        //Appends the category 35 to the product
        wp_set_post_categories( $post->ID, 35, true);
    }
}
add_action( \'wp_insert_post\', \'set_new_product_cat\', 10, 3 );
这是为了设置一个cron任务,每天检查一次30天以前仍设置并取消设置类别的产品

function remove_new_product_cat_deactivate() {
    wp_clear_scheduled_hook( \'remove_new_product_cat_cron\' );
}
 
add_action(\'init\', function() {
    add_action( \'remove_new_product_cat_cron\', \'remove_new_product_cat_run_cron\' );
    register_deactivation_hook( __FILE__, \'remove_new_product_cat_deactivate\' );
 
    if (! wp_next_scheduled ( \'remove_new_product_cat_cron\' )) {
        wp_schedule_event( time(), \'daily\', \'remove_new_product_cat_cron\' );
    }
});
function remove_new_product_cat_run_cron() {
    // Get all products older then 30 days that have the category with id 35
    $args = array(
        \'numberposts\'      => -1,
        \'category\'         => 35,
        \'post_type\'        => \'product\',
        \'date_query\' => array(
            \'before\' => date(\'Y-m-d\', strtotime(\'-30 days\')) 
        )
    );
    $products = get_posts($args);
    
    // Loop trough the products
    foreach ( $products as $product) {
        // Grab an array of currently set categories
        $cats  = wp_get_post_categories($product);
        
        // Remove 35 from the list
        if (($key = array_search(35, $cats)) !== false) {
            unset($messages[$key]);
        }
        
        // Update the categories overwriting existing ones
        wp_set_post_categories( $post->ID, $cats, false);
    }
}

相关推荐

如何从数组中获取特定的字符串/值?PHP

我正在创建一个自定义的wordpress主题,我几乎陷入了一种情况。我创建了一个数组$ark并在其中获取了一些值<?php $ark[] = esc_url( add_query_arg( \'pdff\', $post->ID ) ); print_r($ark) ; echo \'jonty\'; ?> 下面是上述代码的输出;Array ( [0] => /jobifylocal/wp-admin/admin-ajax.php?pdff=127 ) jonty&#