如何使用‘COMMENTS_NUMBER’过滤器?

时间:2013-03-04 作者:Marc Wiest

我不知道怎么用this filter. 有人能给我举个例子吗?我正在努力改变(\'0\', \'1\', \'%\')(\'0 Comments\', \'1 Comment\', \'% Comments\').

我正在使用此函数获取评论编号。

    function lpe_get_comments_number( $anchor=\'#comments\' ) {
        $return = \'<a class="comments-number-link" href="\' . get_permalink() . $anchor . \'">\';
        $return .= get_comments_number(); // \'0\', \'1\', \'%\'
        $return .= \'</a>\';
        return $return;
    }
我知道我可以在这里设置参数并结束这一天,但我希望将自定义函数存储在另一个文件中,并从主题函数处理它们的设置。php。

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

您提到的筛选器在get_comments_number_text. 从源代码中可以看到,注释的数量通过过滤器传递,允许您完全更改默认文本。像这样:

add_filter (\'comments_number\', \'wpse89257_comments_number\', 10, 2);
function wpse89257_comments_number ($output, $number) {
  if ($number == 0) $output = \'0 Comments\';
  elseif ($number == 1) $output = \'1 Comment\';
  else $output = $number . \' Comments\';
  return $output;
  }

SO网友:Ralf912

如果你把函数get_permalink()get_comments_number() 在函数中,则必须$comments$post 可访问VAR。Read more about the scope in PHP.

通常你会用global 关键字。一个简单的例子:检索permalink

function my_personal_permalink( $anchor = \'\' ) {
  global $post;
  $return = get_permalink( $post->ID );
  $return .= $anchor;

  return $return;
}
这是一个非常简单的例子。get_permalink() 需要一些信息从哪个帖子生成永久链接。因此,我们必须在函数内部访问“post”。这将通过global $post;, 它将使实际的post数据可访问。get_permalink() 需要post ID,我们将其传递给$post->ID

如果在函数中使用模板函数,则必须探索模板函数需要哪些数据(post、注释、数据库连接($wpdb), 等),并将其作为论点传递。

SO网友:Ralf912

从您对我的第一个答案的评论来看,我认为您希望应用过滤器。

function lpe_get_comments_number( $anchor=\'#comments\' ) {
  $return = \'<a class="comments-number-link" href="\' . get_permalink() . $anchor . \'">\';

  $args = array(
    \'zero\' => \'Zero comments\',
    \'one\' => \'One comment\',
    \'more\' => \'% Comments\'
  );

  $filtered_args = apply_filters( \'choose_your_hook_name\', $args );

  // be sure all keys in the filtered args are present and have a valid value
  // this is optional but usefull
  $args = wp_parse_args( $filtered_args, $args );

  $return .= get_comments_number( $args[\'zero\'], $args[\'one\'], $args[\'more\'] ); // \'0\', \'1\', \'%\'

  $return .= \'</a>\';
  return $return;
}

add_filter( \'choose_your_hook_name\', \'your_filter_callback\', 1, 1 );

function your_filter_callback( $args ) {
  return array( \'zero\' => \'Foo Comments\', \'one\' => \'Bar Comments\' );
}
您还可以将其他参数传递给apply_filters() 如果要根据传递的参数来决定事情,请执行以下操作:

$zero = \'Zero Comments\';

if ( $today == \'sunday\' ) {
  $foo = \'Sunday, yeah!\';
} else {
  $foo = \'\';
  $bar = \'No sunday\';
}

$zero = apply_filters( \'choose_your_hook_name\', $zero, $foo, $bar );

get_comments_number( $zero, $one, $more );
[更多代码]

add_filter( \'choose_your_hook_name\', \'your_filter_callback\', 1, 3 );

function your_filter_callback( $zero, $foo = \'\', $bar = \'\' ) {
  if ( ! empty( $foo ) )
    $zero = \'No comments on sunday!\';
  elseif( ! empty( $bar ) )
    $zero = $bar . \', here are % comments\';

  return $zero;
}

结束