Интесности add_filter(‘the_content’,

Прикольно, при использовании фильра add_filter(‘the_content’, ”); код фунции фыглядит таким образом:

$content .= "<p>Строка, добавленная ниже поста</p>";
return $content;

Т.е. мы добавили одну строку текста после самого поста. Но если сделать вот так

echo "<p>Строка, добавленная ВЫШЕ поста</p>";
$content .= "<p>Строка, добавленная ниже поста</p>";
return $content;

То это тоже будет работать, и над текстом поста появится наша строка. Собственно, мне это и надо было сделать, но я не понимаю – как это работает? закрадываются сомнения, что так делать не совсем правильно и корректно. Ведь по идее, функция должна возвращать лишь то, что мы делаем с переменной $content. Или же данный фыльтр более продуман и учитывается весь код, помещенный в функцию? Извините, если мой вопрос кому-то покажется смешным 🙂

Это работает очень просто. В Цикле вызывается the_content() – функция, которая вызывает функцию get_the_content(), которая получает $post->post_content, обрабатывает его, в том числе и кастомными фильтрам, и возвращает функции the_content(), которая тупо выводит полученное. Само собой разумеется, что если что-то вывести во время работы get_the_content(), оно будет выведено ДО вывода the_content().

Почему такое использование некорректно? Да потому, что фильтр ‘the_content’ может вызываться, строго говоря, где угодно, например в каком-то виджете. И тогда Ваша строка будет торчать перед виджетом. Но это еще полбеды. Беда в том, фильтр ‘the_content’ используется и при формировании фида, а там эта лишняя строка, будучи выведена где попало, может переломать синтаксис XML, что приведет к невозможности импорта фида агрегатором.

PS Ничего смешного не вижу. Смешно не когда спрашивают, а когда упорствуют в своем невежестве.

Спасибо за подробное обьяснение!

Ну, про фид и другие темы решаю вот так if(!is_feed() && is_single() && is_petition()) , но все же…
Теперь думаю как быть с этими строками, которые надо добавить выше поста, но при помощи фунции, которая добавляет контент ниже поста (к примеру, я подключаю через фильтр вывод некой формы ниже поста, и мне надо при удачном/неудачном заполнении пользователем выводить какие-то месседжи над постом.) Запутался….

Так же, только не выводить строку сразу, а добавлять в начало результата:

$content = "<p>Строка, добавленная ВЫШЕ поста</p>" . $content;
$content .= "<p>Строка, добавленная ниже поста</p>";
return $content;

А почему бы не вписать прямо в шаблон?

А почему бы не вписать прямо в шаблон?

Не совсем понял ход ваших мыслей. Типа if_isset (POST_…) втулить прямо в шаблон?

Sergey Biryukov, я чет туплю 🙂 Самый простой вариант проигнорил ))

Типа про $_POST в первом посте ничего не сказано. Но можно и так. А можно функцию вызвать. Вариантов море. PHP – лучший темплейтер! 🙂

Anonymous
Отправить
Ответ на: