web-dev-qa-db-ja.com

'comments_number'フィルタの使い方は?

このフィルタの使い方 がわからない 。誰かが私に例を見せてもらえますか?私は('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;
    }

ここで引数を設定して1日で呼び出すことができることはわかっていますが、私は自分のカスタム関数を別のファイルに保存し、それらの設定をテーマのfunctions.phpから処理することを望んでいました。

1
Marc Wiest

あなたが言及したフィルタは、 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;
  }
0
cjbj

関数にget_permalink()get_comments_number()のような関数を入れる場合は、$comments$post変数をアクセス可能にする必要があります。 PHPのスコープについてもっと読んでください

通常はglobalキーワードで行います。簡単な例:パーマリンクの復活

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

  return $return;
}

これはとても簡単な例ですget_permalink()は、どの投稿からパーマリンクを生成するかについての情報を必要とします。そのため、関数内で 'post'にアクセスできるようにする必要があります。これはglobal $post;で行われ、実際の投稿データにアクセスできるようになります。 get_permalink()には投稿IDが必要です、$post->IDで渡します

関数内でテンプレート関数を使用する場合は、テンプレート関数に必要なデータ(投稿、コメント、データベース接続($wpdb)など)を調べて、それらを引数として渡す必要があります。

0
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;
}
0
Ralf912