避免上的无限循环transition_post_status
使用时挂钩wp_update_post()
, 尝试:
add_action(\'transition_post_status\', \'new_product_add\', 10, 3);
function new_product_add($new_status, $old_status, $post) {
if(
$old_status != \'publish\'
&& $new_status == \'pending\'
&& !empty($post->ID)
&& $post->post_type === \'product\'
) {
$term = get_term_by(\'name\', \'فروش پیج اینستاگرام\', \'product_cat\');
wp_set_object_terms($post->ID, $term->term_id, \'product_cat\', true);
// unhook this function so it doesn\'t loop infinitely
remove_action( \'transition_post_status\', \'new_product_add\', 10 );
wp_update_post( array(\'ID\' => $post->ID, \'post_content\' => "something"));
// re-hook this function
add_action( \'transition_post_status\', \'new_product_add\', 10, 3 );
}
}
或:
add_action(\'transition_post_status\', \'new_product_add\', 10, 3);
function new_product_add($new_status, $old_status, $post) {
if(
$old_status != \'publish\'
&& $new_status == \'pending\'
&& !empty($post->ID)
&& $post->post_type === \'product\'
) {
$term = get_term_by(\'name\', \'فروش پیج اینستاگرام\', \'product_cat\');
wp_set_object_terms($post->ID, $term->term_id, \'product_cat\', true);
$product = wc_get_product($post->ID);
// unhook this function so it doesn\'t loop infinitely
remove_action( \'transition_post_status\', \'new_product_add\', 10 );
$product->set_description("something");
$product->save();
// re-hook this function
add_action( \'transition_post_status\', \'new_product_add\', 10, 3 );
}
}
这可能会解决你的问题。
这是有记录的here on wp_update_post()
对于save_post
钩