Jak faktycznie działają filtry i haki w WordPress?
Pytam o coś zaawansowanego. Jak to jest zaimplementowane w PHP? Na przykład, w jaki sposób zbiera wszystkie haki z różnych wtyczek i „dołącza” je do haków rdzenia itp.
Jak faktycznie działają filtry i haki w WordPress?
Pytam o coś zaawansowanego. Jak to jest zaimplementowane w PHP? Na przykład, w jaki sposób zbiera wszystkie haki z różnych wtyczek i „dołącza” je do haków rdzenia itp.
Odpowiedzi:
Zasadniczo „ Plugin API ”, który przywołuje filtry i hooki, składa się z następujących funkcji:
apply_filters()
- wykonaćdo_action
- wykonaćapply_filters_ref_array()
- wykonaćdo_action_ref_array()
- wykonaćadd_filter()
- dodaj do stosuadd_action()
- dodaj do stosuOgólnie rzecz biorąc, istnieje kilka globali (co jeszcze w świecie WordPress):
global $wp_filter, $wp_actions, $wp_current_filter, $merged_filters;
Pierwszy $wp_filter
to globalny, Array
który przechowuje wszystkie nazwy filtrów jako podcienie. Każda z tych podrzędnych zawiera następnie jeszcze więcej podrzędnych, które są wywołaniami zwrotnymi przywołanymi w tablicy priorytetowej.
Kiedy więc wywoływana jest funkcja wykonywania , WordPress przeszukuje tablice globałów w poszukiwaniu kluczy o tej nazwie. Następnie dołączone wywołania zwrotne są wykonywane priorytet po priorytecie. Jedyne, co dzieje się z przodu, to wywołania zwrotne dołączone do all
filtra.
Po dodaniu wywołania zwrotnego za pomocą add_action
lub add_filter
, WordPress najpierw oblicza „unikalny” identyfikator, aby nie zastępować już dołączonych wywołań zwrotnych.
$idx = _wp_filter_build_unique_id($tag, $function_to_add, $priority);
Następnie dodaje oddzwonienie do global $wp_filter
stosu:
$wp_filter[ $tag ][ $priority ][ $idx ] = array(
'function' => $function_to_add,
'accepted_args' => $accepted_args
);
Jak widać, główną podrzędną tablicą jest $tag
(lub nazwa akcji / filtru), wtedy wszystko jest przywoływane pod określonym priorytetem, a następnie „kluczowy” ciąg zwrotny / identyfikator zostaje użyty jako klucz.
Później, gdy wywoływany jest filtr - dzieje się to z nazwą $tag
/ action- / filter-name - tablica jest przeszukiwana i wywoływane są wywołania zwrotne. Podczas używania call_user_func_array
nie ma znaczenia, ile argumentów jest dołączonych. WordPress sam to rozwiązuje.
foreach ( (array) current( $wp_filter[ $tag ] ) as $the_ )
{
call_user_func_array(
$the_['function'],
array_slice(
$args,
0,
(int) $the_['accepted_args']
)
);
}
Haki są zawarte zarówno w podstawowych plikach WordPress, jak i w niektórych plikach motywów nadrzędnych. Umożliwiają zaczepienie zawartości w określonej lokalizacji w pliku.
Przykładem jest hak wp_head w WordPress. Możesz użyć tego haka w motywie podrzędnym, aby dodać treść w tej lokalizacji „
Przykład:
add_action('wp_head', 'add_content_to_head');
function add_content_to_head() {
echo 'Your Content';
}
Niektóre motywy premium zawierają również haczyki akcji, których można użyć w motywie potomnym, aby zrobić to samo. Oto mapa wizualna, która zawiera wszystkie haczyki akcji i pozycję, w której wyprowadzają twoją treść w ramach motywu Genesis.
Przykład:
add_action('genesis_header', 'add_content_to_header');
function add_content_to_header() {
echo 'Your Content';
}
Oto jak wygląda hak, jeśli otworzysz plik header.php w strukturze motywu Genesis:
do_action( 'genesis_header' );
Oto lista haków WordPress, których możesz używać na wiele sposobów.
Filtry pozwalają modyfikować dane wyjściowe istniejącej funkcji i są zawarte zarówno w podstawowych plikach WordPress, jak i w niektórych nadrzędnych ramach tematycznych, takich jak Genesis.
Oto lista filtrów, których możesz używać z Genesis Design Framework
Oto lista filtrów zawartych w WordPress
Oto przykład, w jaki sposób można użyć filtra w ramach motywu, takich jak Genesis:
add_filter( 'comment_author_says_text', 'custom_comment_author_says_text' );
function custom_comment_author_says_text() {
return 'author says';
}
Powyższy kod może być użyty w motywie podrzędnym do modyfikacji tekstu autora w komentarzach. Działa w każdym temacie.
Oto kolejny przykład, który dostosowuje długość fragmentów do 50 słów:
add_filter( 'excerpt_length', 'change_excerpt_length' );
function change_excerpt_length($length) {
return 50;
}
Znajdziesz funkcję the_excerpt () w pliku wp-include / post-template.php.
Oto jak to wygląda:
function the_excerpt() {
echo apply_filters('the_excerpt', get_the_excerpt());
}
Możesz również użyć haczyków i filtrów we wtyczkach, aby zrobić dokładnie to samo, a kod nie zostanie utracony podczas aktualizacji motywu nadrzędnego lub WordPressa.
Zasadniczo zaczepy i filtry umożliwiają dostosowanie i modyfikację zarówno WordPress, jak i motywu nadrzędnego bez edytowania podstawowych plików WordPress lub plików motywu nadrzędnego.
Znacznie łatwiej jest dostosować motyw podrzędny, gdy struktura motywu nadrzędnego zawiera zaczepy i filtry, ponieważ nigdy nie trzeba edytować plików szablonów motywów nadrzędnych. W ten sposób możesz również bezpiecznie zmieniać motywy.