How to override a class with constructor on a WordPress plugin?

I’m trying to override a plugin class on a WordPress plugin.
Here is the original plugin class :

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
        }
 }

Here is what I’m trying (in functions.php), but it doesn’t work :

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

How to remove it correctly and how to create the replacement?

Additional info:
I did similar thing on the WooCommerce core. When I want to override a class / function, I use this (for example):

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' );

It’s working properly on WooCommerce core. I tried something similar on WCV_Vendor_Dashboard but it doesn’t work.

Read more here: How to override a class with constructor on a WordPress plugin?

Leave a Reply

Your email address will not be published. Required fields are marked *