Search code examples
wordpresscronproductcustom-wordpress-pagescron-task

When products are being updated using a script function (by a cron), is there any way to identify or trace the function that editted the script?


the goal of this question is to find anything, by which it would be possible to identify an ID or anything, by which it would be possible to track a function (preferably by its name / slug) that was editting or updating prices for all products (lets say by a factor of 1,25), that were imported to the store automatically by cron).

Each time the fuction updates a product, it could for example store someplace a value that this given function editted the product for the last time.

So far I have searched for some options, the ones that I found were the following:

1) get_the_author_meta("display_name"); 2) get_the_modified_author();

However, none of these options are useful, or I have not managed to make them echo anything at all.

The expected results are:

1) To find a way how to track a function updating posts (products) by leaving a trace or ID, that would document that given function that performed the last edit.

2) To find a way how to identify the newly created traces per each post and be able to use it with other fuctions.

The ultimate goal is: To make sure that when a function goes through lets say 4000 products and the fuction does not finish due to some external cause - it does not make another pass from the beginning, but changes only the products it did not change yet.

If the process does not finish, the funtion is being restarted by a cron from the beginning (until it finihes) - which at the moment causes problems - because the already updated product prices by factor 1,25 are being updated over again by the same factor.

Would anyone have any ideas?

Code:

private function set_custom_price($product) {
    if (!$product->exists()) {
        return false;
    }

    $product_price = $product->get_regular_price();

    if (($product_price > 0) && ($product_price < 401)) {
        $product->set_regular_price(ceil(($product_price + ($product_price*(0.5)))/10) *10-1);
    } elseif (($product_price > 400) && ($product_price < 801)) {
        $product->set_regular_price(ceil(($product_price + 120)/10) *10-1);
    } elseif (($product_price > 800) && ($product_price < 1101)) {
        $product->set_regular_price(ceil(($product_price + 150)/10) *10-1);
    } elseif (($product_price > 1100) && ($product_price < 1601)) {
        $product->set_regular_price(ceil(($product_price + 200)/10) *10-1);
    } elseif (($product_price > 1600) && ($product_price < 2001)) {
        $product->set_regular_price(ceil(($product_price + 220)/10) *10-1);
    } elseif (($product_price > 2000) && ($product_price < 5001)) {
        $product->set_regular_price(ceil(($product_price + ($product_price*(0.15)))/10) *10-1);
    }

    $product->save();
    // HERE SOME CODE NEEDED TO REGISTER TRACE??
}

Solution

  • You could possibly use something like this:

    $product_id = $product->ID;
    $last_changed = get_post_meta( $product_id, 'custom_product_last_change', true );
    $last_changed_timestamp = strtotime($last_changed);
    $current_datetime = strtotime(date('m/d/Y h:i:s a', time()));
    
    // Check if change date is in last 24 hours ( you can change that to what ever you want, last week, last month..etc )
    if($last_changed_timestamp > $current_datetime - 86400){
    
        update_post_meta( $product_id, 'custom_product_last_change', date('m/d/Y h:i:s a', time()) );
        // Do the changes here
    }