Intereting Posts
Кнопка массового действия wp_list_table не работает – нет отправки Как использовать «Случаи» вместо «IF» для условной логики Загрузка WordPress на внешнем сервере WP CLI для настройки параметров Пользовательские категории и подкатегории WordPress на category.php Детская тема с плоской тематикой Поиск тегов не работает после изменения структуры константы Как pre_get_posts фильтрует роли в WP Admin Можно ли ограничить файлы из ваших загрузок wordpress (не вошедших в систему пользователей или гостей)? Яркий тег WP предлагает метабокс. Как он обрабатывает идентификатор тега? Синхронизация локального контента с сайтами разработки / размещения Разработка плагина, в котором пользователи могут редактировать записи, сохраненные в базе данных Как получить постоянную ссылку rss-канал? Пользовательский тип типа сообщения в коротком коде Автоматическое сжатие эскизов в зависимости от размера

Как фильтровать контент 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 .