web-dev-qa-db-ja.com

ループ外でコールバックしてwp_list_comments()を呼び出す方法

wp_list_comments関数のコールバック引数としてのテンプレート関数。テンプレート関数は3つの引数を取ります。$comment, $args, $depth。テーマtwentyelevenのfunctions.phpで定義されているテンプレート関数のように。

function twentyeleven_comment( $comment, $args, $depth ) {
$GLOBALS['comment'] = $comment;
switch ( $comment->comment_type ) :
    case 'pingback' :
    case 'trackback' :
?>
<li class="post pingback">
    <p><?php _e( 'Pingback:', 'twentyeleven' ); ?> <?php comment_author_link(); ?><?php edit_comment_link( __( 'Edit', 'twentyeleven' ), '<span class="edit-link">', '</span>' ); ?></p>
<?php
     /** and more ... **/

この関数を別の場所で呼び出したいのですが、コメントへの$comment参照がありますが、$argsおよび$depth変数の設定方法がわかりません。 $depthまたは$argsの値は管理者設定で変更できることを知っているので、$depthを5に、あるいは何にでも設定することはできません。

$args$depthを取得するにはどうすればよいですか。

前もって感謝します。

2
towry

まあ、私は解決策があります。まず、グローバル変数$ comment_depthを使用してそれをtwentyeleven_comment()関数に渡し、twentyeleven_comment()関数で、次のように$defaultsという名前の新しい変数を定義します。

function twentyeleven_comment( $comment, $args, $depth ) {
     $defaults = array('walker' => null, 'max_depth' => '', 'style' => 'ul', 'callback' => null, 'end-callback' => null, 'type' => 'all','page' => '', 'per_page' => '', 'avatar_size' => 32, 'reverse_top_level' => null, 'reverse_children' => '');
     $args = wp_parse_args($args,$defaults);

 /** something else **/
}

別の関数では、次のようにtwentyeleven_comment()関数を呼び出します。

 add_action('comment_post','my_action',10,2);
 function my_action($comment_id,$comment_status){
       $comment_g = &get_comment($comment_id);

       global $comment_depth;  /** here get the $depth  **/
       twentyeleven_comment($comment_g,array(),$comment_depth); /** invoke the function in this way **/

       /*** something else goes here ***/
}

$comment_IDでコメントを1つ出力したいだけです。

コメントしているか、または答えたそれらの人々に感謝します:)

1
towry

先に進み、tventyelevenと同じ方法で呼び出してください。

<?php
                /* Loop through and list the comments. Tell wp_list_comments()
                 * to use twentyeleven_comment() to format the comments.
                 * If you want to overload this in a child theme then you can
                 * define twentyeleven_comment() and that will be used instead.
                 * See twentyeleven_comment() in twentyeleven/functions.php for more.
                 */
                wp_list_comments( array( 'callback' => 'twentyeleven_comment' ) );
            ?>

wp_list_comments関数は、$ depthと他の$ args自体を管理します(walker内)。 wp_list_commentsのソースコード およびコールバック引数を使用した walkerを参照してください

0
david.binda