반응형
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
}
보다 간단한 해결방법은 다음과 같이 설정하는 것입니다.$_POST
variable 및 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
반응형
'programing' 카테고리의 다른 글
구텐베르크에 블록을 '수동'(프로그래밍 방식으로) 삽입하려면? (0) | 2023.04.06 |
---|---|
Angular 템플릿의 인라인 로직JS (0) | 2023.04.06 |
슬라이더가 표시되지 않음: setREVStartSize가 정의되지 않았습니다. (0) | 2023.04.06 |
React/React Native에서 컨스트럭터를 사용하는 것과 getInitialState를 사용하는 것의 차이점은 무엇입니까? (0) | 2023.04.06 |
반응과 함께 구글 사인 버튼 사용 (0) | 2023.04.06 |