в Вордпресс, add_filter()
— это функция, используемая для присоединения пользовательской функции или существующей функции WordPress к определенному действию фильтра. Фильтры — это один из двух типов хуков, второй — действия. Они предоставляют функциям возможность изменять данные других функций и являются краеугольным камнем функциональности плагинов WordPress.
Вот основной синтаксис add_filter()
:
add_filter( string $tag, callable $function_to_add, int $priority = 10, int $accepted_args = 1 )
В качестве системы управления контентом (CMS), WordPress спроектирован так же, как и любая другая платформа… Будь то страница, пост или даже пользовательский пост, у вас есть заголовок и контент. Но не весь контент ограничивается этими двумя вариантами. Одним из примеров является акроним библиотека, которую я разработал в Martech Zone. Аббревиатура состоит из трех элементов: сама аббревиатура, определение это показывает, что означает аббревиатура, и ее объяснение.
Я мог бы легко добавить настраиваемое поле для определения с помощью МетаБокс, но это настраиваемое поле не публикуется на всей странице. Один из способов сделать это — создать собственный шаблон для архива и какую-нибудь страницу с аббревиатурой, где я могу распаковать настраиваемое поле. Однако это требует довольно много работы и должно быть сделано там, где мне нужна эта информация – в архиве, отдельном сообщении, выдержке и ленте пользовательского типа сообщения.
Альтернативой является использование вашей темы и представление этой информации в самом контенте. В этом случае я просто хочу создать короткое предложение: {title} является аббревиатурой от {definition}. Поскольку я также использую библиотеку акронимов для кодов, я также хочу изменить предшествующий текст, если код является числовым: {title} – это код {definition}. Вот примеры:
0p — это аббревиатура от Zero Party. и 404 — это код ошибки «Не найдено»..
Для этого я могу использовать add_filter для черновика, извлечения, ленты и RSS, чтобы поместить соответствующий текст впереди. Кроме того, я проверяю, является ли аббревиатура числовым… и в этом случае, вероятно, это код. (Я понимаю, что мог бы улучшить это дальше, но пока это хорошо). В рамках functions.php мой файл дочерняя темаЯ просто добавляю следующую функцию, а затем вызываю соответствующие фильтры, чтобы применить ее ко всей странице:
// Prepend text to the content of 'acronym' posts
add_filter('the_content', 'prepend_text_to_acronym');
add_filter('the_excerpt', 'prepend_text_to_acronym');
add_filter('the_content_feed', 'prepend_text_to_acronym');
add_filter('the_excerpt_rss', 'prepend_text_to_acronym');
function prepend_text_to_acronym($content) {
global $post;
// Check if it's an 'acronym' post
if($post->post_type == 'acronym') {
// Get the post title and the 'acronym_definition' field
$title = get_the_title($post->ID);
$definition = get_post_meta($post->ID, 'acronym_definition', true);
if (is_numeric($title)) {
$new_content = "<p>$title is the code for $definition.</p>";
} else {
$new_content = "<p>$title is the acronym for $definition.</p>";
}
// Prepend the new content to the original content
$content = $new_content . $content;
}
return $content;
}
Ну, если ты увидишь меня Акроним архив, вы увидите, что эта фраза уже извлечена из каждой записи. И это отдельный абзац на странице с отдельными сообщениями.