programing

woocommerce_update_product 액션– 제품 업데이트마다 한 번만 실행

abcjava 2023. 4. 6. 20:43
반응형

woocommerce_update_product 액션– 제품 업데이트마다 한 번만 실행

woocommerce_update_product 액션을 한 번만 실행할 수 있는 회피책은 무엇입니까?

이미지/변동 저장용 ID를 취득하려면 내부적으로 한 번 저장해야 하기 때문에 두 번 부팅된다고 읽었습니다.

하지만 개발자의 경험상 가장 필요한 것은 이것이 아니라고 생각합니다.

지금까지 발견된 유일한 해결 방법은 작업을 추가하고 후크에서 직접 제거하는 것입니다.

add_action('woocommerce_update_product', 'my_product_update', 10, 2);
function my_product_update($product_id, $product){
    remove_action('woocommerce_update_product');
    // We'll get here only once!
}

그러나 대량 편집을 시도하면 중단되어 후크가 첫 번째 제품에 대해서만 실행되도록 합니다(나중에 제거되기 때문입니다.

이 문제를 해결하기 위한 다른 방법이 있습니까?

감사합니다!

WordPress Transient를 사용하면 도움이 될 수 있습니다.

add_action('woocommerce_update_product', 'my_product_update', 10, 2);
function my_product_update($product_id, $product) {

    $updating_product_id = 'update_product_' . $product_id;
    if ( false === ( $updating_product = get_transient( $updating_product_id ) ) ) {
        // We'll get here only once! within 2 seconds for each product id;
        // run your code here!
        set_transient( $updating_product_id , $product_id, 2 ); // change 2 seconds if not enough
    }
}

메모리 에서 이를 수행하려면 글로벌 변수를 사용합니다.데이터베이스 엔트리는 필요 없습니다.

add_action('woocommerce_update_product', 'my_product_update', 10, 2);
function my_product_update($product_id, $product){
    global $previous_product_id;
    if ($previous_product_id === $product_id){
        // We'll get here only once (per product)!
    }
    $previous_product_id = $product_id;
}

같은 문제에 부딪혔습니다(실제로 후크가 5번 발사되었습니다).마지막 댓글에서 다음 페이지에서 해결책을 찾았습니다.

즉, 다음 항목의 사용:

$times = did_action('woocommerce_update_product');
if( $times === 1){
    //  Do some stuff
}

보다 간단한 해결방법은 다음과 같이 설정하는 것입니다.$_POSTvariable 및 function 시작 시 확인합니다.

add_action( 'woocommerce_update_product', 'my_action', 10, 1 );
function my_action(){
   if( isset($_POST['action_performed']) ){
      //Prevent running the action twice
      return;
    }
   
   // do you stuff here

   $_POST['action_performed'] = true;
}

언급URL : https://stackoverflow.com/questions/59527908/woocommerce-update-product-action-fire-only-once-for-every-product-update

반응형