Search code examples
phpwordpresswoocommercehook-woocommercewordpress-hook

WP post_updated $post_after, $post_before showing same product categories


I'm trying to automatically update an xml feed after I update a product of a certain product category...

I found out I can do that with the post_updated hook.

The feed only contains products of category "Willhaben". So whenever I remove the category "Willhaben" from a product, I need the feed to be updated in order to keep the feed up to date...

My problem is that after I remove the category from my feed the post_updated hook doesn't trigger anymore, as I added an if in order to not update the feed when a product without the category "Willhaben" gets updated, to avoid overload.

I tried using $post_after, $post_before to check if the product once had the category "Willhaben" and then rebuild the feed, but $post_after, $post_before always give me the exact same list of categories for that specific product...

Here is my code:

function wpdocs_run_on_transition_only( $post_ID, $post_after, $post_before ) {
   if(has_term( 1467, 'product_cat', $post_before ) || has_term( 1467, 'product_cat',  $post_after)) {
      create_gebraucht_feed(true);
      return;
   }
}
add_action( 'post_updated', 'wpdocs_run_on_transition_only', 10, 3 );

So because the category list is always the same, I can't determine if the product had the category "Willhaben" and therefore the feed doesn't get created...

I hope it's clear what I mean... does anyone here have an idea what I'm doing wrong? I'm facing this issue for hours now and don't know what to do anymore...

Thx a lot for your time, I'd appreciate some help, thank you!


Solution

  • Maybe if you can't determine the difference, use this apreach:

    update_post_meta($post_ID, 'is_feed', 1)
    

    So if you update a post and it doesn't contain the required category update is_feed to 0.

    update_post_meta should be at the end of the function. Check It at the beginning.