Применение настраиваемого фильтра вместо the_content не отображает вставки

В теме я использую customizer для показа контента до (и после) сообщений, одной почты и т. Д.

/** Page Before Category */ $wp_customize->add_setting( 'content_before_category', array( 'default' => 0, 'sanitize_callback' => 'theme_name_sanitize_integer', ) ); $wp_customize->add_control( 'content_before_category', array( 'label' => esc_html__( 'Page Before Category', 'theme_name' ), 'description' => esc_html__( 'Content of the selected page will be shown on Blog Page before all posts.', 'theme_name' ), 'type' => 'dropdown-pages', 'section' => 'section_blog', ) ); 

И затем в index.php я использовал

 $content_before_category = get_theme_mod( 'content_before_category', false ); if ( $content_before_category ) { $page_id = get_page( $content_before_category ); echo apply_filters( 'the_content', $page_id->post_content ); // WPCS: xss ok. } 

Но мне сказали, что использование фильтра the_content напрямую не очень хорошо, так как оно может сломать плагины, как описано здесь .

Поэтому я сделал следующее:

В моих functions.php я добавил

 if ( ! function_exists( 'mytheme_content_filter' ) ) { /** * Default content filter * * @param string $content Post content. * @return string Post content. */ function mytheme_content_filter( $content ) { return $content; } } /** * Adds custom filter that filters the content and is used instead of 'the_content' filter. */ add_filter( 'mytheme_content_filter', 'wptexturize' ); add_filter( 'mytheme_content_filter', 'convert_smilies' ); add_filter( 'mytheme_content_filter', 'convert_chars' ); add_filter( 'mytheme_content_filter', 'wpautop' ); add_filter( 'mytheme_content_filter', 'shortcode_unautop' ); add_filter( 'mytheme_content_filter', 'do_shortcode' ); 

А затем изменили фильтр на

 $content_before_category = get_theme_mod( 'content_before_category', false ); if ( $content_before_category ) { $page_id = get_page( $content_before_category ); echo apply_filters( 'mytheme_content_filter', $page_id->post_content ); // WPCS: xss ok. } 

Что работает для всего, кроме встроенного контента.

Видеоролики youtube, твиттер не будут отображаться, как обычно.

Я попытался найти фильтр для встраивания, но не смог найти его.

Любой совет?

Solutions Collecting From Web of "Применение настраиваемого фильтра вместо the_content не отображает вставки"

Фильтр the_content так же хорош, как и другие фильтры. Проблема в том, что предполагается, что он будет запущен внутри цикла с корректной установкой столбца glogal $post в текущую запись в цикле. Итак, вы можете сделать что-то вроде этого (не тестировалось, просто написано здесь как пример):

 $content_before_category = get_theme_mod( 'content_before_category', false ); if ( $content_before_category ) { global $post; // get_page() is deprecated; use get_post() instead // $page_id = get_page( $content_before_category ); $post = get_post( $content_before_category ); // Setup global post data with our page setup_postdata( $post ); // Output the content the_content(); // Reset global post data wp_reset_postdata(); } 

Если вы предпочитаете запускать свои собственные фильтры, вы можете. Проблема с встроенным контентом заключается в том, что вы не запустили фильтр с автоматической установкой; просто добавьте его:

 global $wp_embed; add_filter( 'mytheme_content_filter', array( $wp_embed, 'autoembed') );