将变量从子主题函数传递到父主题筛选器

时间:2016-03-08 作者:Saif Islam

我想将一个变量从我的子主题函数传递给驻留在父主题中的过滤器。请让我知道下面的代码是否有效?这条路对吗?

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 从我的子主题到这样的父主题?

3 个回复
SO网友:Brent

我不太确定您想要完成什么,但这不会起作用,因为您试图使用或调用父主题中声明的函数,而不是用新函数替换它。我不确定替换子主题中的函数是否也能起作用。也许其他人可以帮助回答这个问题。

功能map_thumbnail() 您试图在子主题中调用的,实际上被add_filter() 函数右上方,用于修改现有函数post_thumbnail_html().

此外,即使它可以工作,您在尝试调用该函数时也只传递了一个参数(“#0099dd”),而且它似乎出了问题。

SO网友:Apeiron

apply_filter(\'post_thumbnail_html\', $color). 我想你需要这个不?

Call the functions added to a filter hook.

附加到filter hook$标记的回调函数通过调用此函数来调用。这个函数可以用来创建一个新的过滤器挂钩,只需使用$tag参数指定的新挂钩的名称调用这个函数。

该函数允许添加其他参数并将其传递给挂钩。

这是医生apply_filters

SO网友:cjbj

在找到解决方案之前,让我们先看看函数是如何工作的。

是的,您可以从子主题调用父主题中的函数(尽管在您的示例中,您会得到一个错误,因为您在需要两个变量的地方传递了一个变量)。因此,您可以在一个地方将其添加为过滤器,并在其他地方单独调用它。

加载WordPress时,它正在清点所有可用功能。信息技术first loads the child theme\'s functions.php, 然后父主题的。在子主题中重新定义的函数在父主题中被跳过。代码的执行仅在盘点完成后开始。然后可以从子主题调用父主题函数。您可以从主题调用插件函数,也可以通过其他方式调用插件函数。函数定义在哪里并不重要,只要它是available.

从子主题调用函数不会改变函数作为过滤器调用时的行为post_thumbnail_htmlget_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";}

相关推荐

WP_Query filters

这个问题可能看起来很愚蠢,但我真的没有找到有用的链接。我正在尝试做一个简单的查询,在这里我选择了最近的10篇文章,我希望能够在循环中只显示这10篇文章中的1篇我的代码看起来像 // Query latest 10 records $the_query = new WP_Query( array( \'post_type\' => \'post\', \"order\" => \"DESC\", \'posts_per_page