У меня есть пользовательская функция в моей родительской теме, которая подключается к admin_head Wordpress, делая вещи с разрешенными доменами, которые я определяю в функции.Эта часть отлично работает.
Но я хочу иметь возможность добавлять дополнительные разрешенные домены к этой функции из дочерней темы (другими словами, без изменения исходной функции в родительской теме).Я думал, что apply_filters может быть хорошим решением, но, похоже, он не пропускает дополнительные домены. Что я делаю не так?Или есть лучший способ сделать это?
Это демонстрирует проблему, которую я пытаюсь решить:
function custom_function( $additional_domains ) {
$allowed_domains = array(
'domain1.com',
'domain2.com',
'domain3.com',
);
if ( $additional_domains ) {
array_push( $allowed_domains, $additional_domains );
}
print_r( $allowed_domains );
}
add_action('admin_head', 'custom_function');
function send_domains_to_custom_function( $domains ) {
return $domains;
}
add_filter( 'custom_function', 'send_domains_to_custom_function', 10, 1 );
$add_these_domains = array(
'domain4.com',
'domain5.com',
);
apply_filters( 'custom_function', $add_these_domains );
Это результат предыдущего кода:
Array
(
[0] => domain1.com
[1] => domain2.com
[2] => domain3.com
)
Но вот результат, который я хочу получить:
Array
(
[0] => domain1.com
[1] => domain2.com
[2] => domain3.com
[3] => domain4.com
[3] => domain5.com
)
Обновление: окончательное полнофункциональное решение
Спасибо @melvin и прояснение для всех, кто может найтипозже, вот что я закончил:
Функция родительской темы:
function custom_function( $additional_domains ) {
$allowed_domains = array(
'domain1.com',
'domain2.com',
'domain3.com',
);
$additional_domains = apply_filters( 'add_to_allowed_domains', $additional_domains );
if ( !empty($additional_domains) ) {
$allowed_domains = array_merge( $allowed_domains, $additional_domains );
}
print_r( $allowed_domains );
}
add_action('admin_head', 'custom_function');
Функция дочерней темы и фильтр:
add_filter('add_to_allowed_domains','add_to_domains_fn');
function add_to_domains_fn($domains){
$domains= array('domain4.com','domain5.com');
return $domains;
}
Функция родительской темы по-прежнему работаетс исходными разрешенными доменами, определенными в нем.Если дочерняя тема включает add_to_domains_fn () и фильтр, она добавляет дополнительные домены, как и ожидалось.