Как обеспечить, чтобы фильтр «the_content» выполнялся только для основного отображаемого содержимого?

У меня есть плагин, который добавляет метод в фильтр «the_content».

add_filter('the_content', 'myFilteringFunction', 10000);

Внутри этой функции я хочу добавить некоторые ссылки в начале и в конце содержимого. Но мне нужно сделать это только для «основного» содержимого отображаемой страницы, поэтому – ни в одном из виджетов, а не в нижнем колонтитуле, заголовке и т. Д.

Более того, я хочу, чтобы он был включен для настраиваемого типа сообщений, который я определил в том же плагине. Поэтому я понял, что это проверка, думая, что этого будет достаточно.

 if( is_single() && get_query_var('post_type') == 'myCustomPostType' && is_main_query() ) 

К сожалению, он не работает должным образом – по крайней мере, не во всех случаях.

На странице установлен тип WP плагина, он не работает (ссылки добавлены, несмотря на условие). Зачем?

Solutions Collecting From Web of "Как обеспечить, чтобы фильтр «the_content» выполнялся только для основного отображаемого содержимого?"

Попробуйте добавить условие к вашей функции фильтрации, которая проверяет ваш тип сообщения на get_post_type .

if ( 'book' == get_post_type() )

Если вы хотите также применить этот фильтр к страницам, попробуйте is_singular () и укажите свой собственный тип сообщений в качестве аргумента.

is_singular('book');

Это вернет true, если выполнено одно из следующих условий:
холост()
is_page ()
is_attachment ()
'book' == get_post_type ()

Согласно документации WordPress , вы можете выполнить это, используя этот код:

 add_filter( 'the_content', 'filter_the_content_in_the_main_loop' ); function filter_the_content_in_the_main_loop( $content ) { // Check if we're inside the main loop in a single post page. if ( is_single() && in_the_loop() && is_main_query() ) { return $content . "I'm filtering the content inside the main loop"; } return $content; } 

Или используйте ту же логику через одну строку в начале функции обратного вызова фильтра:

 if( !is_single() || !in_the_loop() || !is_main_query() ) return $content;