Skip to main content
2 of 4
replaced http://wordpress.stackexchange.com/ with https://wordpress.stackexchange.com/

How to stop or remove an action being called inside a function of an extended class

##The Problem I am trying to remove an JSON+LD block being added by a WordPress plugin called The Events Calendar.

I believe it is being added by the function called: Tribe__Events__Template__Single_Event within which the function named google_data_markup is responsible for the actual markup which I am trying to stop/prevent from being added to the HTML.

##The Code From my limited understanding of this, I need to remove this action:

add_action( 'wp_head', array( $this, 'google_data_markup' ) );.

I believe it is being called here, in Single_Event.php:

if ( ! class_exists( 'Tribe__Events__Template__Single_Event' ) ) { /** * Single event template class */ class Tribe__Events__Template__Single_Event extends Tribe__Events__Template_Factory { protected $body_class = 'events-single'; public function hooks() { parent::hooks(); // google data markup add_action( 'wp_head', array( $this, 'google_data_markup' ) ); } public function google_data_markup() { $event_markup = new Tribe__Events__Google_Data_Markup__Event(); $html = apply_filters( 'tribe_google_data_markup_json', $event_markup->script_block() ); echo $html; } /** ... 

##What I've tried

###Initial Attempts After finding this on StackOverflow, and this on WordPress Dev Exchange, I tried:

remove_action( 'wp_head', array( 'Tribe__Events__Template__Single_Event', 'google_data_markup' ) ); 

and

global $Tribe__Events__Template__Single_Event; remove_action( 'wp_head', array( $Tribe__Events__Template__Single_Event, 'google_data_markup' ) ); 

But it did not work.

###Subsequent Attempts

After getting even more desperate and seeing this slim thread (the example in that thread seems very similar to mine but no answer provided that I understand), and this, I've also tried this, with the & before the variable name (why?):

remove_action( 'wp_head', array( &$Tribe__Events__Template__Single_Event, 'google_data_markup' ) ); 

I've also tried this:

function remove_the_events_calendar_jsonld() { remove_action( 'wp_head', array( $Tribe__Events__Template__Single_Event, 'google_data_markup' ) ); } add_action( 'plugins_loaded', 'remove_the_events_calendar_jsonld', 1 ); 

as well as:

remove_action( 'Tribe__Events__Template__Single_Event', 'google_data_markup' ); 

Please help. At this point I have no idea if I am making a simple syntax or logic error of sorts, or if I am completely confused and oblivious to how functions, classes and actions work.

Andre Bulatov
  • 187
  • 1
  • 2
  • 11