Wordpress: применить_фильтры и добавить_действие к the_content = EVIL? - PullRequest
3 голосов
/ 02 июля 2010

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

Учебник находится здесь: Создание плагина WordPress для добавления биографий авторов в ваши сообщения

Чтобы подвести итог учебника и понять, в чем проблема , учебник добавляет авторскую биографию к концу контента, например, так (короткая версия):

function x($content) {
     return $content . "Author Bio";
}

add_action('the_content','x');

Проблема:

Когда кто-то использует:

$z = apply_filters('the_content', 'some content here');
echo $z;

Author Bio будет в конечном итоге применен к $ z, и если $ z будет отображаться в середине какой-то страницы ... Author Bio окажется в середине какой-то страницы ... правильно? (это правильно, потому что я проверил это ...)

Есть ли лучший способ применить что-либо к концу / под / под хуком the_content? кроме add_action(‘the_content’, ‘some_function’), потому что это мне кажется злом ...

или apply_filters(‘the_content’, ‘some content here’) не является нормой или что разработчики не должны использовать внутри своих шаблонов WordPress…? (что кажется нормой, по крайней мере, после того, как Google отформатировал «the_content» вне цикла) ...

Ответы [ 2 ]

3 голосов
/ 02 июля 2010

Использование apply_filters('the_content','some content here'), хотя это может и не быть «нормой» (я не знаю. Я не видел этого раньше, но если бы мне нужен был отформатированный текст, это то, что я бы сделал), это прекрасно допустимое использование фильтров для получения текста, отформатированного как содержимое. К сожалению, нет лучшего способа добавить что-либо к контенту из плагина. Именно так все это работает.

Однако есть (менее чем оптимальный) способ обойти это. Как часть процесса установки / установки вашего плагина, попросите пользователя вставить в свою тему вызов пользовательской функции, действие или фильтр. Я знаю несколько плагинов, которые делают это, так что это не так уж редко. Примерно так:

do_action('my_super_awesome_bio_hook');

Позволит вам подключиться, не беспокоясь о добавлении биографии к неожиданному (и непреднамеренному) контенту. Еще лучше было бы вставить фильтр:

echo apply_filters('my_super_awesome_bio_filter_hook','');

Это позволит вашему плагину изменять биографию, но также позволит тому, кто использует плагин, переопределить его при необходимости (например, на страницах, где они просто используют выдержки, например результаты поиска и т.

Надеюсь, это помогло.

Также, одно незначительное дополнение: вы должны использовать add_filter, а не add_action, чтобы добавить биографию автора. add_action все еще работает, но вы хотите использовать этот фильтр.

0 голосов
/ 21 марта 2012

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

http://codex.wordpress.org/Function_Reference/wpautop

, который я сейчас собираюсь использовать вместо add_filters ('the_content').Я хочу форматирование WYSIWYG, но я не хочу, чтобы что-то добавлялось к моему контенту, потому что это больше не традиционный контент.

...