Действия и фильтры
Имхо лучше всего использовать действия , чтобы принести плагин функции в темах.
Пример № 1
Вот небольшой плагин, чтобы проверить это.
<?php
/** Plugin Name: (#68117) Print Hello! */
function wpse68117_print_hello()
{
echo "Hello World!";
}
add_action( 'wpse68117_say', 'wpse68117_print_hello' );
Внутри темы:
<?php
/** Template Name: Test »Print Hello!« Plugin */
get_header();
// Now we call the plugins hook
do_action( 'wpse68117_say' );
Что теперь происходит / The kool kid
Таким образом, нам не нужно проверять существование функции, файла, класса, метода или, может быть, даже глобального (не делайте этого!) $variable
. WP intern global уже принимает это за нас: проверяет, является ли имя ловушки текущим фильтром, и присоединяет его. Если его не существует, ничего не происходит.
Пример № 2
С нашим следующим плагином мы присоединяем функцию обратного вызова, которая принимает один аргумент.
<?php
/** Plugin Name: (#68117) Print Thing! */
function wpse68117_print_thing_cb( $thing )
{
return "Hello {$thing}!";
}
add_filter( 'wpse68117_say_thing', 'wpse68117_print_thing_cb' );
Внутри темы:
<?php
/** Template Name: Test »Print Thing!« Plugin */
get_header();
// Now we call the plugins hook
echo apply_filter( 'wpse68117_say_thing', 'World' );
На этот раз мы предлагаем пользователю / разработчику возможность добавить аргумент. Он может либо echo/print
выводить данные, либо даже обрабатывать их дальше (в случае, если вы получили взамен массив).
Пример № 3
С третьим плагином мы прикрепляем функцию обратного вызова, которая принимает два аргумента.
<?php
/** Plugin Name: (#68117) Print Alot! */
function wpse68117_alot_cb( $thing, $belongs = 'is mine' )
{
return "Hello! The {$thing} {$belongs}";
}
add_filter( 'wpse68117_grab_it', 'wpse68117_alot_cb' );
Внутри темы:
<?php
/** Template Name: Test »Print Alot!« Plugin */
get_header();
// Now we call the plugins hook
$string_arr = implode(
" "
,apply_filter( 'wpse68117_grab_it', 'World', 'is yours' )
);
foreach ( $string_arr as $part )
{
// Highlight the $thing
if ( strstr( 'World', $part )
{
echo "<mark>{$part} </mark>";
continue;
}
echo "{$part} ";
}
Этот плагин теперь позволяет нам вставить два аргумента. Мы можем сохранить его в $variable
и обработать дальше.
Вывод
Используя фильтры и действия, вы повышаете производительность, избегая ненужных проверок (сравнивайте скорость function_*/class_*/method_*/file_exists
или выполняйте поиск по всему миру с in_array()
~ 1k (?) Поисками фильтра). Вы также избегаете иметь все эти ненужные уведомления для неустановленных переменных и т. Д., Так как плагин заботится об этом.