如何将变量从多个函数传递到自定义筛选器

时间:2016-11-23 作者:Abhik

我试图将一个变量从一个函数(呈现一个短代码)传递到另一个将google字体排队的函数。我正在使用过滤器。由于函数连接到add_shortcode, 我想我不能直接添加过滤器。

我正在使用中介函数。当我做print_r 对于中的中介函数wp_footer, 它显示变量,但当我将其挂接到add_filter ,并将其打印到wp_footer.

function first_shortcode( $atts , $content = null ) {

    $atts = shortcode_atts(
        array(
            \'typography\' => \'\',
        ),
        $atts
    );

    //Other shortcode stuffs

    if ( $atts[\'typography\'] ) {
        $typo = $atts[\'typography\'];

        $font = array();
        $font[\'family\'] = $typo[\'font\'];
        $font[\'weight\'] = $typo[\'weight\'];

        googlefont_filter_callback( $font );
    }

}
add_shortcode( \'first\', \'first_shortcode\' );

function second_shortcode( $atts , $content = null ) {

    $atts = shortcode_atts(
        array(
            \'typography\' => \'\',
        ),
        $atts
    );

    //Other shortcode stuffs

    if ( $atts[\'typography\'] ) {
        $typo = $atts[\'typography\'];

        $font = array();
        $font[\'family\'] = $typo[\'font\'];
        $font[\'weight\'] = $typo[\'weight\'];

        googlefont_filter_callback( $font );
    }

}
add_shortcode( \'first\', \'second_shortcode\' );  
调解人职能:

function googlefont_filter_callback( $fonts=array() ) {

    return $fonts;

}
add_filter( \'googlefont_loader\', \'googlefont_filter_callback\' );  
以及将字体排队的功能:

function googlefont_loader( $fonts=array() ) {

    $fonts = array();
    $fonts = apply_filters( \'googlefont_loader\', $fonts );

    $new_array = array();

    foreach ($fonts as $font){
        $new_value = !empty($new_array[$font[\'family\']]) ? $new_array[$font[\'family\']].\',\'.$font[\'weight\'] : $font[\'weight\'];
        $new_array[$font[\'family\']] =  $new_value;
    }

    /*
    $out = \'\';
    foreach( $new_array as $family => $weight ) {

        $out .= $family . \':\' . $weight . \'|\';  
    }
    if ( !empty($fonts) ) {
        wp_register_style( \'purewpns-googlefonts\', \'//fonts.googleapis.com/css?family=\' . rtrim($out, \'|\') );
        wp_enqueue_style( \'purewpns-googlefonts\' );
    }
    */

    echo \'<pre>\' . print_r( $fonts, true ). \'</pre>\';

}
add_action( \'wp_footer\', \'purewpns_googlefont_loader\' );
//add_action( \'wp_enqueue_scripts\', \'purewpns_googlefont_loader\' );
现在,回声进来了googlefont_loader 返回空数组

Array
(
)  
我做错了什么?或者,这是因为挂钩的发射时间?

1 个回复
SO网友:maheshwaghmare

我想从你的代码

add_action( \'wp_footer\', \'purewpns_googlefont_loader\' );
功能purewpns_googlefont_loader 可能是打字错误。

使用动作wp_footer 并添加了空数组,可以明显打印空数组。

好的。您可以使用:

googlefont_filter_callback( $font );
除非

$fonts = apply_filters( \'googlefont_loader\', $fonts );
在功能中googlefont_loader()

并在googlefont\\u filter\\u回调函数中添加过滤器,如下所示:

function googlefont_filter_callback( $fonts=array() ) {
return apply_filters( \'googlefont_loader\', $fonts );
}
现在,您可以从两个短代码中访问字体。

E、 g。

add_filter( \'googlefont_loader\' function( $fonts ) {
 var_dump( $fonts);
return $fonts;
});
但它对两个短代码都有影响。您可以为每个短代码引入另一个单独的过滤器。

相关推荐

两个函数具有不同的参数和Add_Actions,但代码相同

我觉得这很简单。我有两个包含相同代码的函数,但需要有不同的add\\u操作和参数。必须有一种方法可以做到这一点,所以当我想添加更多代码时,我不会在两者之间复制和粘贴,而且你不应该复制代码。我错过了什么?一个用于ACF并在更新帖子类型时激发,另一个用于Admin列,该列在内联编辑相同的帖子类型时激发相同的操作。如果有帮助的话,我会把它们放在插件文件中。 function acp_editing_saved_usage1( AC\\Column $column, $post_id, $value ) {