2012-05-20 2 views
5

WordPress 플러그인을 처음 사용했습니다. woocommerce 플러그인이 단일 제품 페이지에 이미지를 표시하는 방법을 수정하는 약간의 플러그인을 작성하려고합니다. 특히, 제품 이미지가 없으면 여기에 자리 표시 자 이미지를 표시하는 대신 이미지를 보유하는 div를 "display : none"으로 지정하십시오. 내가 사용하고있는 전략은 add_action을 사용하여 내 자신의 버전의 woocommerce의 product_image.php 템플릿을 렌더링 한 다음 remove_action을 사용하여 원본 product_image.php 파일이 렌더링되지 않도록하는 것입니다. add_action은 Firebug에서 "display : none"div를 볼 수 있으므로 분명히 작동합니다. 그러나 remove_action은 성공하지 못합니다. 여기 WordPress 플러그인에서 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의 우선 순위는 20, 그래서 나는 30

두 디버깅 문 끝에 remove_action에 우선 순위를했다 add_action이 "1"을 리턴하고 remove_action의 결과가 비어 있음을 보여줍니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변

12

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'); 
} 
+0

아무런 차이가없는 것 같습니다. 다른 아이디어? –

+2

우선 순위는 처음에 작업을 등록 할 때 사용 된 것과 일치해야합니다 (즉, woocommerce-hooks.php의 23 번째 줄). 이제는 위의 대답을 수정하십시오. –

+0

정말 고마워요! –

11

지금이 질문에 여러 번 발견 한 나는 누군가가했습니다 텐데 그냥 내가이 작업을 수행 할 수 있다는 것을 저에게 말했다 :

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

를이 실제로 우선 순위를 하드 코딩에서 저를 저장하는 환경에 따라 다를 수 있습니다.

+0

좋은 트릭을 잡아 우선 순위 :) –

관련 문제