我在父主题中有一个自定义函数,该函数挂接到Wordpress admin_head中,用我在函数中定义的允许域进行处理。这部分工作正常。
但是,我希望能够从子主题向该功能添加其他允许的域(换句话说,无需修改父主题中的原始功能)。我以为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()和过滤器,则会按预期添加其他域。
答案 0 :(得分:1)
从 wordpress
的店面主题中查看以下功能./anagram <<EOW && echo "Test succeeded" || echo "Test Failed"
listen
silent
EOW
您是否了解了如何应用apply_filters以使用变量function storefront_header_styles() {
$is_header_image = get_header_image();
$header_bg_image = '';
if ( $is_header_image ) {
$header_bg_image = 'url(' . esc_url( $is_header_image ) . ')';
}
$styles = array();
if ( '' !== $header_bg_image ) {
$styles['background-image'] = $header_bg_image;
}
$styles = apply_filters( 'storefront_header_styles', $styles );
foreach ( $styles as $style => $value ) {
echo esc_attr( $style . ': ' . $value . '; ' );
}
}
?
$styles
该主题应该在该位置放置一个过滤器,或者您应该手动向该主题添加apply_filter。
#UPDATE
我真的从主题功能和子主题中得不到什么代码。假设我已正确理解,则需要以下内容
$styles = apply_filters( 'storefront_header_styles', $styles );
按上述方法更改功能后,即可使用
function custom_function( $additional_domains ) {
$allowed_domains = array(
'domain1.com',
'domain2.com',
'domain3.com',
);
$allowed_domains = apply_filters( 'add_to_allowed_domains', $allowed_domains );
if ( $additional_domains ) {
array_push( $allowed_domains, $additional_domains );
}
print_r( $allowed_domains );
}
add_action('admin_head', 'custom_function');
NB:由于父主题中的函数没有任何过滤器,因此不建议手动添加apply_filters。因为这些更改将在下一次主题更新时被覆盖。因此,您可以要求主题开发人员在此处添加过滤器