Intereting Posts
Каков фильтр для пользовательских полей? Текстовый виджет не сохраняет содержимое Дополнительная ссылка на внешнюю веб-страницу WP HTTP XML-ответ HTML-кодирование и проблемы с отображением изображения В моем электронном адресе отображается электронное письмо, которое не работает. Что я делаю? Фильтрация записей администратора для пользовательского типа сообщения Как создать собственный администратор WP с настраиваемыми URL-адресами Проблема с загрузкой файла Google Site и WordPress Я не могу получить tax_query в get_posts () для работы с пользовательской таксономией Как получить текущий идентификатор сайта? (WPMU) загружать загрузочную страницу загрузки слишком медленно Почему комментарии по умолчанию отключены в моем custom_post_types? Сортировка сообщений в алфавитном порядке, имеющих отдельные цифры WordPress считает, что моя настраиваемая тема является темой в публичном репозитории

Как фильтровать контент the_content () & include из шаблона

Я пытаюсь отфильтровать the_content() на одной странице, но похоже, что он создает бесконечный цикл. Я хочу знать, как это исправить. Я хочу переопределить the_content() .

Есть ли другой способ переопределить содержимое одной страницы из плагина?

 add_filter( 'the_content', 'change_single_content' ); function change_single_content($content){ global $post; if ( 'my-CPT' == get_post_type() && is_single() ){ ob_start(); include my_plugin_theme('single-template.php'); //include single template content return ob_get_clean(); } return $content; } 

Solutions Collecting From Web of "Как фильтровать контент the_content () & include из шаблона"

Я предполагаю, что single-template.php использует the_content . Теперь подумайте о том, что происходит:

  1. Ваш фильтр вызывает загрузку single-template.php
  2. single-template.php использует the_content
  3. Таким образом, single-template.php загружается снова
  4. Который использует the_content
  5. Что загружает single-template.php
  6. Который использует the_content

Я не совсем уверен, как это исправить, поскольку ваш вопрос освещен подробно. Трудно сказать, что делает большая часть кода или какова ваша конечная цель, но это может быть так же просто, как удаление фильтра условно:

 add_filter( 'the_content', 'change_single_content' ); function change_single_content($content){ global $post; if ( 'my-CPT' == get_post_type() && is_single() ){ remove_filter( 'the_content', 'change_single_content' ); // this !! ob_start(); include my_plugin_theme('single-template.php'); //include single template content return ob_get_clean(); } return $content; } 

Я также уверен, что то, что вы делаете, является неправильным способом или, по крайней мере, менее правильным, чтобы делать то, что вы пытаетесь сделать. Я не могу это доказать, но мой смысл паука покалывает что-то ужасное.

 add_filter( 'the_content', 'filter_content' ); function filter_content( $content ){ if ( is_single() ){ $new_content = str_replace( 'for', 'FOR', $content ); return $new_content; } else { return $content; } } 

Попробуй это. Я попытался заменить the_content на один пост. Он заменяется, но не на индексной странице из-за is_single() .

Вы можете настроить его, который соответствует вашим потребностям.

Проблема с вашим кодом заключается в том, что вы принимаете $content качестве параметра и возвращаете ob_get_clean() . В этом случае вы должны вернуть $content после его настройки.

Как и в коде выше, я принял $content , изменил его и вернул $new_content .