如何在wordpress中正确使用此过滤器?

时间:2016-06-24 16:05:22

标签: php html arrays wordpress twitter

我正在使用this Twitter插件。我使用模板中的do_shortcode函数输出内容。

在他们的other notes部分中,它说我可以覆盖自定义HTML标记,它将使用add_filter('latest_tweets_render_list')

在列表对象中输出推文

但是,当我这样做时

add_filter('latest_tweets_render_list', function( array $list ){
 return '<div>'.$list.'</div>';
}, 10, 1);

我收到一条PHP警告,指出有array to string conversion并且没有输出任何推文。

我查看了插件核心文件,并且有这个。

function latest_tweets_render_html( $screen_name = '', $num = 5, $rts = true, $ats = true, $pop = 0 ){
    $items = latest_tweets_render( $screen_name, $num, $rts, $ats, $pop );
    $list  = apply_filters('latest_tweets_render_list', $items, $screen_name );
    if( is_array($list) ){
        $list = '<ul><li>'.implode('</li><li>',$items).'</li></ul>';
    }
    return 
        '<div class="latest-tweets">'. 
            apply_filters( 'latest_tweets_render_before', '' ).
            $list.
            apply_filters( 'latest_tweets_render_after', '' ).
        '</div>';
}

如何正确使用latest_tweet_render_list过滤器以覆盖默认的HTML标记?我试图使用foreach循环,但这也没有做到。如果可以避免,我不希望修改插件文件。

1 个答案:

答案 0 :(得分:0)

您的回调方法传递了array - 您无法简单地输出数组(因此您的转发信息)。根据数组中的内容,您可以执行以下操作:

add_filter('latest_tweets_render_list', function( array $list ){
  $output = '<div>';
  foreach ($list as $l) {
    $output .= $l;
  }
  $output .= '</div>';
  return $output;
}, 10, 1);

要查看$list变量中的项目,您可以先在功能顶部使用var_dump($list)