в Вордпресс, 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. Аббревиатура состоит из трех элементов… сама аббревиатура определение он показывает, что означает аббревиатура и ее объяснение.
Я смог легко добавить настраиваемое поле в определение с помощью MetaBox, но это настраиваемое поле не публикуется на всем сайте. Один из способов сделать это — создать собственный шаблон для архива и одну страницу с аббревиатурой, где я могу вытащить пользовательское поле. Однако это требует довольно много работы и должно быть сделано везде, где мне нужна эта информация — в архиве, в отдельном сообщении, в извлечении и в ленте пользовательского типа сообщения.
Альтернативой является использование темы и добавление этой информации к самому содержимому. В этом случае я просто хочу добавить короткое предложение: {название} является аббревиатурой от {определение}. Поскольку я также использую библиотеку акронимов для кодов, я также хочу изменить текст с префиксом, если код числовой: {название} — это код {определения}. Вот примеры:
0p — это аббревиатура от Zero Party, а 404 — это код Not Found.
Для этого я могу использовать 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;
}
Теперь, когда вы увидите мой архив акронимов, вы увидите, что это предложение добавляется к выдержке каждого поста. И это отдельный абзац на странице отдельных постов.