我想将一个变量从我的子主题函数传递给驻留在父主题中的过滤器。请让我知道下面的代码是否有效?这条路对吗?
Code in Parent Theme\'s functions.php
add_filter( \'post_thumbnail_html\', "map_thumbnail" );
function map_thumbnail($html,$color) {
$my_post = get_post($post->ID);
$my_color = $color;
if($my_post->post_name == "contact") {
$html = \'<img src="http://maps.googleapis.com/maps/api/staticmap?color:$my_color">\';
}
return $html;
}
Code in Child Theme\'s functions.php
<?php map_thumbnail(\'#0099dd\'); ?>
请告诉我,上面的代码行吗?我可以传递变量吗
$color
从我的子主题到这样的父主题?
SO网友:cjbj
在找到解决方案之前,让我们先看看函数是如何工作的。
是的,您可以从子主题调用父主题中的函数(尽管在您的示例中,您会得到一个错误,因为您在需要两个变量的地方传递了一个变量)。因此,您可以在一个地方将其添加为过滤器,并在其他地方单独调用它。
加载WordPress时,它正在清点所有可用功能。信息技术first loads the child theme\'s functions.php
, 然后父主题的。在子主题中重新定义的函数在父主题中被跳过。代码的执行仅在盘点完成后开始。然后可以从子主题调用父主题函数。您可以从主题调用插件函数,也可以通过其他方式调用插件函数。函数定义在哪里并不重要,只要它是available.
从子主题调用函数不会改变函数作为过滤器调用时的行为post_thumbnail_html
从get_the_post_thumbnail
作用这是两个彼此都不知道的单独通话。因此,如果希望在过滤器中应用子函数中的颜色,那么这将不起作用。要做到这一点,你必须扭转局面。在父函数中,从子函数(如果存在)调用函数,并在子函数中定义传递颜色的函数。
// parent
if (function_exists (wpse220111_get_child_color))
$my_color = wpse220111_get_child_color;
else
$my_color = "#000000";
// child
function wpse220111_get_child_color () {return "#0099dd";}