• rkoziol7

    (@rkoziol7)


    Hello,

    How to extend a 3rd party plugin class with a snippet or in functions.php of my theme? The original class in plugin file I would like to extend looks like this:

    global $newsletter;
    
    class Newsletter extends NewsletterModule {
      static function instance() {
        if (self::$instance == null) {
            self::$instance = new Newsletter();
        }
        return self::$instance;
      }
      function __construct() {
        add_action('newsletter', array($this, 'hook_newsletter'), 1);
      }
      function hook_newsletter() {
        $this->logger->debug('hook_newsletter> Start');
        ...
      }
    }
    
    $newsletter = Newsletter::instance();

    My class in functions.php in my theme looks like this:

    global $newsletter;
    
    class MyNewsletter extends Newsletter {
      static function instance() {
        if (self::$instance == null) {
          self::$instance = new MyNewsletter();
        }
        return self::$instance;
      }
      function __construct() {
        parent::__construct();
        $this->logger->debug('my hook_newsletter init');
        remove_action( 'newsletter', array( 'Newsletter', 'hook_newsletter' ) );
        add_action( 'newsletter', array( $this, 'hook_newsletter' ), 20 );
      }
    
      function hook_newsletter() {
        $this->logger->debug('my hook_newsletter> Start');
      }
    }
    
    $newsletter = MyNewsletter::instance();

    However when the action ‘newsletter’ is being invoked the original class function is used. What I am doing wrong?

    Best regards,
    Rob

The topic ‘Extending 3rd party plugin class’ is closed to new replies.