我正在尝试删除一个名为The Events Calendar的WordPress插件添加的JSON + LD块。
我相信它是由名为Tribe__Events__Template__Single_Event
的函数添加的,其中名为google_data_markup
的函数负责实际标记,我试图阻止/阻止将其添加到HTML中。
根据我对此的有限理解,我需要删除此操作:
add_action( 'wp_head', array( $this, 'google_data_markup' ) );
。
我相信它在这里被调用,在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;
}
/**
...
在StackOverflow上找到this后,在WordPress Dev Exchange上找到this后,我尝试了:
remove_action( 'wp_head', array( 'Tribe__Events__Template__Single_Event', 'google_data_markup' ) );
和
global $Tribe__Events__Template__Single_Event;
remove_action( 'wp_head', array( $Tribe__Events__Template__Single_Event, 'google_data_markup' ) );
但它不起作用。
在变得更加绝望并且看到this slim thread之后(该线程中的示例与我的非常相似,但我明白没有回答)和this,我也试过了,变量名前的&
(为什么?):
remove_action( 'wp_head', array( &$Tribe__Events__Template__Single_Event, 'google_data_markup' ) );
我也试过这个:
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 );
以及:
remove_action( 'Tribe__Events__Template__Single_Event', 'google_data_markup' );
请帮忙。在这一点上,我不知道我是在做一个简单的语法或逻辑错误,或者我是否完全混淆和忘记函数,类和操作如何工作。
根据Andrew Khan的建议,我尝试过:
global $Tribe__Events__Template__Single_Event;
remove_action( 'wp_head', array( $Tribe__Events__Template__Single_Event, 'google_data_markup' ), 20 );
和
remove_action( 'wp_head', array( 'Tribe__Events__Template__Single_Event', 'google_data_markup' ), 20 );
但它仍会添加ld+json
块。
这有效:
add_filter( 'tribe_google_data_markup_json', '__return_empty_string', 20 );
感谢Andrew Khan的答案。他的解释是here, below。
答案 0 :(得分:1)
以上似乎不起作用,但这是一个解决方案。
add_filter( 'tribe_google_data_markup_json', '__return_empty_string', 20 );
对于所有想知道的人,请查看操作正在调用的函数 - 它只是回显了一个应用了过滤器的HTML字符串。该特定过滤器也未封装在类中,因此可以在任何地方轻松访问。我想你正在使用的那个并不是为插件而设计的。