Прикольно, при использовании фильра 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()) , но все же…
Теперь думаю как быть с этими строками, которые надо добавить выше поста, но при помощи фунции, которая добавляет контент ниже поста (к примеру, я подключаю через фильтр вывод некой формы ниже поста, и мне надо при удачном/неудачном заполнении пользователем выводить какие-то месседжи над постом.) Запутался….
Так же, только не выводить строку сразу, а добавлять в начало результата:
А почему бы не вписать прямо в шаблон?
Не совсем понял ход ваших мыслей. Типа if_isset (POST_…) втулить прямо в шаблон?
Sergey Biryukov, я чет туплю 🙂 Самый простой вариант проигнорил ))
Типа про $_POST в первом посте ничего не сказано. Но можно и так. А можно функцию вызвать. Вариантов море. PHP – лучший темплейтер! 🙂