워드프레스/우커머스 훅이 불이 붙지 않습니까?
저는 SO에 대한 블로그와 게시물을 많이 뒤지다가 여기서 이 질문을 했습니다.
저는 WooCommerce 플러그인을 사용하고 있으며 타사 API에 전달하기 위해 액션 훅을 통해 제품 데이터를 가져오려고 했습니다.
여러 가지 코드 블록을 시도해 보았지만 제품 정보를 알려주는 것이 없습니다.
그래서 자녀 테마에 다음과 같은 후크가 있는 제품을 WooCommerce에서 추가/업데이트/삭제하려고 합니다.functions.php
파일.
후크 1
function on_all_status_transitions( $new_status, $old_status, $post ) {
echo '<script>console.log("old_status: ' . $old_status . '")</script>';
echo '<script>console.log("new_status: ' . $new_status . '")</script>';
}
add_action('transition_post_status', 'on_all_status_transitions', 10, 3 );
이것은 다음과 같은 경우에 한번만 인쇄됩니다.$new_status
가auto-draft
초안으로 저장하거나 게시하거나 휴지통에 옮겨도 아무 일도 일어나지 않습니다.
후크2
function sync_on_product_save($product_Id){
$product = wc_get_product($product_Id);
echo '<script>console.log("Product Id: ' . $product_Id . '")</script>';
// Do what you need for 3rd party here...
}
add_action('woocommerce_new_product', 'sync_on_product_save', 10, 1);
이 후크는 절대 작동되지 않습니다.
후크 3
제품 업데이트 후크에서도 동일하게 발생하며 트리거되지 않습니다.
add_action('woocommerce_update_product', 'sync_on_product_save', 10, 1);
제가 읽어본 모든 것을 보면, 그것은 매우 분명하고 효과가 있어야 할 것 같습니다.그래서 만약 누군가가 제가 무엇을 잘못하고 있는지 또는 제가 놓치고 있는 것을 지적해준다면 좋을 것입니다.
또한, WooCommerce에서 payload를 지정할 수 있는 URL로 전달할 수 있는 webhook을 만들 수 있다는 것을 알고 있습니다.저는 이것을 마지막 선택으로 하고 싶습니다.
어떤 도움이라도 주신다면 대단히 감사하겠습니다.미리 감사드립니다.
참고: https가 활성화된 localhost overwamp에서 Wordpress 인스턴스를 실행하고 있습니다.
제품을 업데이트하는 동안 항상 훅이 발사되었습니다.product id를 덤프하고 PHP 실행을 종료하면 product id를 볼 수 있습니다.
function sync_on_product_save($product_Id){
var_dump( $product_Id ); exit;
echo '<script>console.log("Product Id: ' . $product_Id . '")</script>';
// Do what you need for 3rd party here...
}
add_action('woocommerce_update_product', 'sync_on_product_save', 10, 1);
프로세스는 다음과 같습니다.업데이트 상품 버튼을 누르시면 게시물을 올리실 수 있습니다.스크립트가 추가되는 php는 곧 원래 제품 편집 URL[http://example.com/wp-admin/post.php?post=xx&action=edit ]로 리디렉션됩니다.이렇게 하면 추가된 스크립트가 제거되므로 스크립트를 볼 수 없습니다.
감사해요.
여기서 문제는 WP add-new/edit 화면이 전환되는 동안 스크립트를 반향하려고 한다는 것입니다.
@SushilAdhikari님이 말씀하신 것처럼, 당신의 훅은 제대로 발사되고 있지만, 당신의 스크립트는 게시물에 인쇄되어 있습니다.php는 게시/업데이트 작업 후 편집 화면으로 리디렉션됩니다.
후크가 트리거될 때 수신하는 데이터를 확인하려면 다른 파일에 기록하고 작업이 완료된 후 확인해야 합니다.저는 데이터를 기록하기 위해 할 수 있는 작은 샘플을 공유합니다.
add_action('woocommerce_new_product', 'custom_new_product_cb');
function custom_new_product_cb($id) {
error_log('Data ID: '.print_r($id, true).PHP_EOL, 3, $_SERVER['DOCUMENT_ROOT'] . "/product-data.log");
}
add_action('woocommerce_update_product', 'custom_update_product_cb');
function custom_update_product_cb($id) {
error_log('Updated Product ID: '.print_r($id, true).PHP_EOL, 3, $_SERVER['DOCUMENT_ROOT'] . "/product-data.log");
}
add_action('woocommerce_trash_product', 'custom_trash_product_cb');
function custom_trash_product_cb($id) {
error_log('Trashed Product ID: '.print_r($id, true).PHP_EOL, 3, $_SERVER['DOCUMENT_ROOT'] . "/product-data.log");
}
이 맞다면 $id
제품 참조로 전달되므로 제품 데이터를 얻을 수 있으며 화면에 스크립트만 추가하려는 경우 접근 방식이 달라야 합니다.
도움이 되었으면 좋겠습니다.
언급URL : https://stackoverflow.com/questions/56697264/wordpress-woocommerce-hooks-not-firing
'programing' 카테고리의 다른 글
두 개의 어레이를 동시에 반복 (0) | 2023.09.23 |
---|---|
우커머스는 이름을 사용하여 상품 속성 ID를 가져옵니다. (0) | 2023.09.23 |
인사이드 div 클릭을 비활성화하는 방법 (0) | 2023.09.23 |
초기 커밋을 어떻게 참조합니까? (0) | 2023.09.18 |
OR 연산자가 있는 AngularJsng급 다중 조건 (0) | 2023.09.18 |