source

remove_action()이 WordPress 플러그인에서 작동하지 않음

bestscript 2023. 3. 1. 11:16

remove_action()이 WordPress 플러그인에서 작동하지 않음

WordPress 플러그인은 처음 써봅니다.woocommerce 플러그인이 단일 제품 페이지에 이미지를 표시하는 방법을 수정하는 작은 플러그인을 작성하려고 합니다.특히 제품 이미지가 없는 경우 플레이스 홀더 이미지를 표시하는 대신 이미지를 유지하는 div를 "display:none"으로 만듭니다.현재 사용하고 있는 전략은 add_action을 사용하여 woocommerce의 product_image의 내 버전을 렌더링하는 것입니다.php 템플릿을 사용한 후 remove_action을 사용하여 원래 product_image를 방지합니다.php 파일이 렌더링되지 않습니다.Firebug에서 "display:none" div를 볼 수 있기 때문에 add_action은 확실히 동작하고 있습니다.그러나 remove_action은 성공하지 못했습니다.

코드는 다음과 같습니다.

$add_result = add_action( 'woocommerce_before_single_product_summary', 'eba_wc_show_product_images', 10);

function eba_wc_show_product_images() {
    include( 'eba_product-image.php' );
}

$remove_result = remove_action( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_images', 30);
echo "<hr/>result of add_result = " . $add_result . "<hr/>";
echo "<hr/>result of remove_result = " . $remove_result . "<hr/>";

woocommerce_before_single_product_summary 훅의 원래 add_action의 priority는 20이었기 때문에 remove_action 30에 priority를 설정했습니다.

끝에 있는 두 개의 디버깅 문은 add_action이 "1"을 반환하고 있음을 나타내지만 remove_action의 결과는 비어 있습니다.어떤 도움이라도 주시면 감사하겠습니다.

나는 지금 이 질문을 여러 번 우연히 발견했는데, 누군가 내가 할 수 있다고 말해 줬으면 좋았을 텐데.

$priority = has_action('action_name', 'function_name');
remove_action('action_name', 'function_name', $priority);

이렇게 하면 실제로 우선순위를 하드코딩할 필요가 없어지며, 이는 환경에 따라 다를 수 있습니다.

plugins_loaded 중에 작업을 삭제해 보십시오.이 작업을 삭제하기 전에 작업이 확실하게 추가되었는지 확인해야 합니다.

add_action('plugins_loaded','alter_woo_hooks');

function alter_woo_hooks() {
    $add_result = add_action( 'woocommerce_before_single_product_summary', 'eba_wc_show_product_images', 10);
    $remove_result = remove_action( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_images', 10);

    echo "<hr/>result of add_result = " . $add_result . "<hr/>";
    echo "<hr/>result of remove_result = " . $remove_result . "<hr/>";
}

function eba_wc_show_product_images() {
    include( 'eba_product-image.php' );
}

나에게 효과가 있었던 다른 방법은 우선 순위가 빠른 정확한 훅을 발사하고 우선순위가 낮은 다른 훅을 제거하는 것이다.

add_action('action_name','alter_some_hook',0);

function alter_some_hook() {
    $priority = has_action('action_name', 'function_name');
    remove_action('action_name', 'function_name', $priority);
}

코드 실행 시퀀스를 이해해야 합니다.add_action이 실행된 후 remove_action이 호출되고 액션이 실제로 큐에 있는지 확인해야 합니다.먼저 삭제한 후 추가해도 동작하지 않고 이치에 맞지 않습니다.

언급URL : https://stackoverflow.com/questions/10673984/remove-action-not-working-in-wordpress-plugin