Intereting Posts
Как получить доступ к краткому описанию продукта в шаблоне электронной почты WooCommerce? Как добавить вторую таблицу стилей в редактор Как выполнить цикл пользователя с помощью короткого кода Slug перенаправляется на 404 Получение сообщений с закрытой страницы Временная разбивка на страницы не работает должным образом Создайте первые 3 сообщения по-разному и используйте 2-й цикл, чтобы получить покой / смещение и разбивка на страницы разбита нечетное поведение от шаблонных тегов Есть ли действие / фильтр, вызываемый при завершении WP_Query-> запроса и назначении сообщений Что делает сырое значение для фильтра фильтра get_bloginfo? Скрыть панель администратора определенного типа сообщений Удаление пользовательского порядка сортировки из списка страниц admin Сообщения, просматриваемые Кнопка WordPress «Добавить новый тег» не работает Как получить сообщение, вызвав ajax?

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