为什么两个函数相互覆盖?

时间:2013-06-03 作者:Kelly James

我的插件中有以下功能:

add_filter(\'comment_text\', \'commentimage_comment_text\');
function commentimage_comment_text($comment = \'\') { 
  $options = get_option(\'commentimage\');
  $id = get_comment_ID();

  $images = $options[\'images\'];
  if (!isset($images) || !is_numeric($images)) $images = 1;
    $url = get_option(\'siteurl\');
    for ($i=0; $i<$images; $i++) {
      if (file_exists(ABSPATH . \'wp-content/comment-image/\' . $id . ($i==0?\'\':(\'-\'.$i)) . \'-tn.jpg\')) {
         $comment .= \'<p><a href="\' . $url . \'/wp-content/comment-image/\' . commentimage_find_original($id, $i) . \'"><img src="\' . $url . \'/wp-content/comment-image/\' .    $id . ($i==0?\'\':(\'-\'.$i)) . \'-tn.jpg"/></a></p>\';
      }
    }
  return $comment;
}
现在,它显示了我的观众上传的成功图像。我希望我的浏览者可以选择对他们进行评级,因此我在我的插件中,在上面一行的下方写下以下代码:

 add_filter(\'comment_text\', \'commentimage_comment_text2\');
 function commentimage_comment_text2()
 {
   $rtt= "<br>Rating";
   return $rtt;
 }
然后,我的图片消失了,它显示了文字评分-一旦我得到如何克服过度写作的答案,我会根据自己的需要更改文字评分。

1 个回复
最合适的回答,由SO网友:birgire 整理而成

看起来您正在用commentimage_comment_text2 筛选,尝试此操作以附加分级文本:

add_filter( \'comment_text\', \'commentimage_comment_text2\' );
function commentimage_comment_text2( $comment ){
    $rtt = "<br>Rating";

    return $comment.$rtt;
}
附言:你忘了$comment 输入参数。

这是WordPress中一个穷人的过滤器流骨架图;-)

poor man's skematic image of the filter flow in WordPress

过滤器图标取自here.

在您的情况下,过滤器的名称是comment_text 你的两次回访是commentimage_comment_textcommentimage_comment_text2 具有优先权10 (默认设置)。

您可以使用以下代码段查看此筛选器的所有回调:

add_action(\'wp_footer\',function(){
        global $wp_filter;
        printf(\'<pre>%s</pre>\',print_r( $wp_filter[\'comment_text\'],true));
});
在我的安装中,我得到了所有这些回调的以下输出(在我的主题的页脚部分),以及相应的指定优先级。

我加上了你的两次回电commentimage_comment_textcommentimage_comment_text2 所以你也可以看到他们:

Array
(
    [9] => Array
        (
            [make_clickable] => Array
                (
                    [function] => make_clickable
                    [accepted_args] => 1
                )
        )
    [10] => Array
        (
            [wptexturize] => Array
                (
                    [function] => wptexturize
                    [accepted_args] => 1
                )
            [convert_chars] => Array
                (
                    [function] => convert_chars
                    [accepted_args] => 1
                )
            [commentimage_comment_text] => Array
                (
                    [function] => commentimage_comment_text
                    [accepted_args] => 1
                )
            [commentimage_comment_text2] => Array
                (
                    [function] => commentimage_comment_text2
                    [accepted_args] => 1
                )
        )
    [20] => Array
        (
            [convert_smilies] => Array
                (
                    [function] => convert_smilies
                    [accepted_args] => 1
                )
        )
    [25] => Array
        (
            [force_balance_tags] => Array
                (
                    [function] => force_balance_tags
                    [accepted_args] => 1
                )
        )
    [30] => Array
        (
            [wpautop] => Array
                (
                    [function] => wpautop
                    [accepted_args] => 1
                )
        )
    [31] => Array
        (
            [capital_P_dangit] => Array
                (
                    [function] => capital_P_dangit
                    [accepted_args] => 1
                )
        )
)

结束