Як фільтри та гачки насправді працюють у WordPress?
Я запитую про щось просунуте. Як це реалізується в PHP? Наприклад, як він збирає всі гачки з різних плагінів і "прикріплює" їх до основних крюків тощо.
Як фільтри та гачки насправді працюють у WordPress?
Я запитую про щось просунуте. Як це реалізується в PHP? Наприклад, як він збирає всі гачки з різних плагінів і "прикріплює" їх до основних крюків тощо.
Відповіді:
В основному " API плагінів ", який викликає фільтри та гачки, складається з таких функцій:
apply_filters()
- виконатиdo_action
- виконатиapply_filters_ref_array()
- виконатиdo_action_ref_array()
- виконатиadd_filter()
- додати до стекаadd_action()
- додати до стекаЗагалом, є кілька глобальних (що ще у світі WordPress):
global $wp_filter, $wp_actions, $wp_current_filter, $merged_filters;
Перший $wp_filter
- це глобальний, Array
який містить усі назви фільтрів як підрядні. Кожен з цих підривків містить ще більше підмагістралей, які викликаються зворотними дзвінками під пріоритетним масивом.
Отже, коли викликається функція Execute , WordPress здійснює пошук у цих масивах глобалів для ключів з цим ім'ям. Тоді додані зворотні виклики виконують пріоритет після пріоритету. Єдине, що відбувається спереду - це зворотні дзвінки, прикріплені до all
фільтра.
Коли ви додаєте зворотний дзвінок за допомогою add_action
або add_filter
, то WordPress спочатку обчислює "унікальний" ідентифікатор, щоб не замінити вже додані зворотні дзвінки.
$idx = _wp_filter_build_unique_id($tag, $function_to_add, $priority);
Потім додає зворотний дзвінок до global $wp_filter
стеку:
$wp_filter[ $tag ][ $priority ][ $idx ] = array(
'function' => $function_to_add,
'accepted_args' => $accepted_args
);
Як ви бачите, основним масивом підрозділу є $tag
(або ім'я дії / фільтра), тоді все викликається під певний пріоритет, і тоді "унікальний" рядок зворотного виклику / ідентифікатора використовується як ключ.
Пізніше, коли викликається фільтр - що відбувається з $tag
/ ім'ям / ім'ям фільтра - масив отримує пошук і викликає зворотній зв'язок. Оскільки він використовує, call_user_func_array
насправді не має значення, скільки аргументів додається. WordPress вирішує це сам.
foreach ( (array) current( $wp_filter[ $tag ] ) as $the_ )
{
call_user_func_array(
$the_['function'],
array_slice(
$args,
0,
(int) $the_['accepted_args']
)
);
}
Гачки входять як в основні файли WordPress, так і в деякі файли батьківських тем. Вони дозволяють підключити вміст у певному місці файлу.
Приклад - гак wp_head в WordPress. Ви можете використовувати цей гачок у своїй дочірній темі, щоб додати вміст у цьому місці "
Приклад:
add_action('wp_head', 'add_content_to_head');
function add_content_to_head() {
echo 'Your Content';
}
Деякі теми преміум класу також містять гачки дій, які ви можете використовувати в дочірній темі, щоб зробити те саме. Ось візуальна карта, яка містить усі гачки дій та положення, в якому вони виводять ваш вміст, в тему Genesis.
Приклад:
add_action('genesis_header', 'add_content_to_header');
function add_content_to_header() {
echo 'Your Content';
}
Ось як виглядає гачок, якщо ви відкрили файл header.php в рамках теми Genesis:
do_action( 'genesis_header' );
Ось список гачків WordPress, якими ви можете користуватися багатьма способами.
Фільтри дозволяють змінювати вихідну діючу функцію і вона входить як в основні файли WordPress, так і в деякі батьківські теми, такі як Genesis.
Ось перелік фільтрів, які можна використовувати разом із програмою Genesis Design Framework
Ось список фільтрів, що входять у WordPress
Ось приклад того, як можна використовувати фільтр у такій темі, як Genesis:
add_filter( 'comment_author_says_text', 'custom_comment_author_says_text' );
function custom_comment_author_says_text() {
return 'author says';
}
Наведений вище код можна використовувати в дочірній темі, щоб змінити текст автора у ваших коментарях. Він працює в будь-якій темі.
Ось ще один приклад, який налаштовує довжину уривків до 50 слів:
add_filter( 'excerpt_length', 'change_excerpt_length' );
function change_excerpt_length($length) {
return 50;
}
Ви знайдете функцію the_excerpt () у файлі wp- include / post-template.php.
Ось як це виглядає:
function the_excerpt() {
echo apply_filters('the_excerpt', get_the_excerpt());
}
Ви також можете використовувати гачки та фільтри в плагінах, щоб зробити те саме, і код не буде втрачений, коли ви оновлюєте батьківську тему або WordPress.
В основному, гачки та фільтри дозволяють вам налаштувати та змінити як WordPress, так і батьківську тему, не редагуючи основні файли WordPress або файли батьківських тем.
Значно простіше налаштувати дочірню тему, коли основна тема теми містить гачки та фільтри, оскільки вам ніколи не потрібно редагувати файли шаблонів батьківських тем. Таким чином ви можете сміливо змінювати теми.