WordPress 플러그인에서 생성자로 클래스를 재정의하는 방법은 무엇입니까?

헨드라 세 티아 완

WordPress 플러그인에서 플러그인 클래스를 재정의하려고합니다. 다음은 원래 플러그인 클래스입니다.

class WCV_Vendor_Dashboard
{
       /**
        * __construct()
        */
        function __construct()
        {
            add_shortcode( 'wcv_shop_settings', array( $this, 'display_vendor_settings' ) );
            add_shortcode( 'wcv_vendor_dashboard', array( $this, 'display_vendor_products' ) );

            add_action( 'template_redirect', array( $this, 'check_access' ) );
            add_action( 'init', array( $this, 'save_vendor_settings' ) );
        }

        public function save_vendor_settings(){
               //some codes here
        }
 }

다음은 내가 시도하는 것입니다 (functions.php에서).하지만 작동하지 않습니다.

$wcv_vendor_dashboard = new WCV_Vendor_Dashboard();
global $wcv_vendor_dashboard;
remove_action( 'init', array( $wcv_vendor_dashboard , 'save_vendor_settings' ) );

올바르게 제거하는 방법과 대체물을 만드는 방법은 무엇입니까?

추가 정보 : WooCommerce 코어에서 비슷한 일을했습니다. 클래스 / 함수를 재정의하려면 다음을 사용합니다 (예 :

remove_action( 'template_redirect', array( 'WC_Form_Handler', 'save_account_details' ) );
function new_save_account_details() {
  //custom code here
}
add_action( 'template_redirect', 'new_save_account_details' );

WooCommerce 코어에서 제대로 작동하고 있습니다. WCV_Vendor_Dashboard에서 비슷한 것을 시도했지만 작동하지 않습니다.

다니엘

왜 woocommerce와 함께 작동했지만이 경우에는 작동하지 않습니까?

특정 작업에 함수를 연결하면 WoredPress는 해당 콜백에 대한 고유 ID를 만들고이를 전역 $wp_filter배열에 저장합니다 (사실 이전에는 배열 이었지만 이제는 객체입니다). 객체 메소드 콜백 (예 :)의 array( $this, 'save_vendor_settings' )경우 ID는 spl_object_hashphp 함수 로 생성됩니다 . 위의 예에서

spl_object_hash( $this ) . 'save_vendor_settings'

, 그리고 그것은처럼 보입니다 000000001c0af63f000000006d7fe83asave_vendor_settings.

개체 메서드를 "합법적으로"제거하려면 remove_action()처음에 함수를 연결하는 데 사용 된 원래 개체에 액세스 할 수 있어야합니다. 객체가 전역 네임 스페이스에있는 경우 :

global $wcv;
remove_action( 'init', array( $wcv, 'save_vendor_settings' ) );

생성 된 ID는 동일한 클래스의 인스턴스 인 경우에도 각 개체에 대해 고유하므로 다른 클래스 인스턴스를 만들 수 없습니다.

WooCommerce의 경우 정적 클래스 메서드에 관한 것 같습니다. 정적 클래스 메서드의 ID를 생성하는 데 다른 논리가 사용되며, 함수 및 정적 메서드 콜백은 문자열로 반환됩니다. 귀하의 예를 들면 다음과 같습니다.

'WC_Form_Handler' . '::' . 'save_account_details'

한 경우에는 작동하지만 다른 경우에는 작동하지 않는 이유를 알 수 있습니다.

첨부 된 함수를 전역 $wp_filter객체 에서 직접 대체하여 대체하는 해킹이 있지만 100 % 신뢰할 수있는 것은 아닙니다. 원래 객체에 액세스 할 수 없기 때문에 $wp_filter함수 이름으로 만 필터링 할 수 있습니다 . 동일한 작업에 대해 동일한 이름이 있으면 잘못된 핸들러를 대체합니다.

global $wp_filter;
foreach ( $wp_filter['init']->callbacks as $priority => &$callbacks ) {

    foreach ( $callbacks as $id => &$callback ) {

        if ( substr( $id, -strlen( 'save_vendor_settings' ) ) === 'save_vendor_settings' ) {
            // replace the callback with new function
            $callback['function'] = 'new_save_vendor_settings';
        }
    }
}

나는 그것이 효과가 있기를 바랍니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

태그 슬러그를 wordpress에서 tr 클래스로 표시하는 방법은 무엇입니까?

분류에서Dev

WordPress 사용자 정의 플러그인에서 추가 페이지를 활성화하는 방법은 무엇입니까?

분류에서Dev

여러 클래스에 대해 ReSharper로 생성자를 자동 생성하는 방법은 무엇입니까?

분류에서Dev

jQuery Validate 플러그인에서 종속 요소의 성공에 유효한 클래스를 종속 요소에 추가하는 방법은 무엇입니까?

분류에서Dev

부모 클래스 생성자에서 재정의 된 정적 메서드를 참조하는 방법은 무엇입니까?

분류에서Dev

WordPress에서 PHP / Javascript if / else 조건부로 클래스를 숨기는 방법은 무엇입니까?

분류에서Dev

g ++로 다른 파일에 정의 된 클래스를 생성하는 방법은 무엇입니까?

분류에서Dev

자식 클래스 생성자에서 부모 생성자를 호출하는 방법은 무엇입니까?

분류에서Dev

Wordpress에서 div 클래스를 숨기는 방법은 무엇입니까? CSS

분류에서Dev

WordPress 플러그인에서 PHP를 사용하여 http 요청을 만드는 방법은 무엇입니까?

분류에서Dev

WordPress 플러그인에서 AJAX를 호출하는 방법은 무엇입니까?

분류에서Dev

새 인스턴스를 다시 생성하지 않고 인스턴스 클래스의 멤버를 재설정하는 방법은 무엇입니까?

분류에서Dev

구체적인 자식 클래스의 재정의 된 메서드에서 추상 클래스의 생성자를 통해 인스턴스화 된 개체의 속성에 액세스하는 방법은 무엇입니까?

분류에서Dev

C ++의 클래스 생성자 내부에서 스레드를 사용하는 방법은 무엇입니까?

분류에서Dev

Haskell에서 Monad 클래스로 작업하는 여러 생성자 인수에 함수를 매핑하는 방법은 무엇입니까?

분류에서Dev

파생 클래스가 클래스 이름 만 반환하는 메서드를 재정의하도록하는 방법은 무엇입니까?

분류에서Dev

WordPress 플러그인에서 새 페이지를 만드는 방법은 무엇입니까?

분류에서Dev

다른 파일의 클래스 외부에서 클래스 생성자를 정의하는 방법은 무엇입니까?

분류에서Dev

다른 템플릿 클래스의 내부 템플릿 클래스 생성자를 정의하는 방법은 무엇입니까?

분류에서Dev

Boost.Python에서 std :: map 또는 std :: vector 인수를 사용하는 생성자로 C ++ 클래스를 래핑하는 방법은 무엇입니까?

분류에서Dev

Eclipse 플러그인에서 TextEditor의 문자열 입력을 프로그래밍 방식으로 설정하는 방법은 무엇입니까?

분류에서Dev

속성 값이 부모 클래스에서 재정의되지 않도록 하위 클래스를 만드는 방법은 무엇입니까?

분류에서Dev

PHP WordPress 플러그인-정적 홈페이지에만 div를 표시하는 방법은 무엇입니까?

분류에서Dev

Cloudmine에서 사용자 지정 로그인 클래스를 만드는 방법은 무엇입니까?

분류에서Dev

Objective-C에서 메서드를 재정 의하여 하위 클래스를 임시로 정의하는 방법은 무엇입니까?

분류에서Dev

iOS 용 Opentok Cordova 플러그인에서 게시자 오류를 수정하는 방법은 무엇입니까?

분류에서Dev

인터페이스를 클래스 속성으로 정의하는 방법은 무엇입니까?

분류에서Dev

기본 클래스에서 동등성을 재정의하는 방법은 무엇입니까?

분류에서Dev

클래스 템플릿 외부에서 클래스 템플릿의 생성자 템플릿을 정의하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    태그 슬러그를 wordpress에서 tr 클래스로 표시하는 방법은 무엇입니까?

  2. 2

    WordPress 사용자 정의 플러그인에서 추가 페이지를 활성화하는 방법은 무엇입니까?

  3. 3

    여러 클래스에 대해 ReSharper로 생성자를 자동 생성하는 방법은 무엇입니까?

  4. 4

    jQuery Validate 플러그인에서 종속 요소의 성공에 유효한 클래스를 종속 요소에 추가하는 방법은 무엇입니까?

  5. 5

    부모 클래스 생성자에서 재정의 된 정적 메서드를 참조하는 방법은 무엇입니까?

  6. 6

    WordPress에서 PHP / Javascript if / else 조건부로 클래스를 숨기는 방법은 무엇입니까?

  7. 7

    g ++로 다른 파일에 정의 된 클래스를 생성하는 방법은 무엇입니까?

  8. 8

    자식 클래스 생성자에서 부모 생성자를 호출하는 방법은 무엇입니까?

  9. 9

    Wordpress에서 div 클래스를 숨기는 방법은 무엇입니까? CSS

  10. 10

    WordPress 플러그인에서 PHP를 사용하여 http 요청을 만드는 방법은 무엇입니까?

  11. 11

    WordPress 플러그인에서 AJAX를 호출하는 방법은 무엇입니까?

  12. 12

    새 인스턴스를 다시 생성하지 않고 인스턴스 클래스의 멤버를 재설정하는 방법은 무엇입니까?

  13. 13

    구체적인 자식 클래스의 재정의 된 메서드에서 추상 클래스의 생성자를 통해 인스턴스화 된 개체의 속성에 액세스하는 방법은 무엇입니까?

  14. 14

    C ++의 클래스 생성자 내부에서 스레드를 사용하는 방법은 무엇입니까?

  15. 15

    Haskell에서 Monad 클래스로 작업하는 여러 생성자 인수에 함수를 매핑하는 방법은 무엇입니까?

  16. 16

    파생 클래스가 클래스 이름 만 반환하는 메서드를 재정의하도록하는 방법은 무엇입니까?

  17. 17

    WordPress 플러그인에서 새 페이지를 만드는 방법은 무엇입니까?

  18. 18

    다른 파일의 클래스 외부에서 클래스 생성자를 정의하는 방법은 무엇입니까?

  19. 19

    다른 템플릿 클래스의 내부 템플릿 클래스 생성자를 정의하는 방법은 무엇입니까?

  20. 20

    Boost.Python에서 std :: map 또는 std :: vector 인수를 사용하는 생성자로 C ++ 클래스를 래핑하는 방법은 무엇입니까?

  21. 21

    Eclipse 플러그인에서 TextEditor의 문자열 입력을 프로그래밍 방식으로 설정하는 방법은 무엇입니까?

  22. 22

    속성 값이 부모 클래스에서 재정의되지 않도록 하위 클래스를 만드는 방법은 무엇입니까?

  23. 23

    PHP WordPress 플러그인-정적 홈페이지에만 div를 표시하는 방법은 무엇입니까?

  24. 24

    Cloudmine에서 사용자 지정 로그인 클래스를 만드는 방법은 무엇입니까?

  25. 25

    Objective-C에서 메서드를 재정 의하여 하위 클래스를 임시로 정의하는 방법은 무엇입니까?

  26. 26

    iOS 용 Opentok Cordova 플러그인에서 게시자 오류를 수정하는 방법은 무엇입니까?

  27. 27

    인터페이스를 클래스 속성으로 정의하는 방법은 무엇입니까?

  28. 28

    기본 클래스에서 동등성을 재정의하는 방법은 무엇입니까?

  29. 29

    클래스 템플릿 외부에서 클래스 템플릿의 생성자 템플릿을 정의하는 방법은 무엇입니까?

뜨겁다태그

보관