web-dev-qa-db-ja.com

コメントのスタイル設定が複雑なのはなぜですか。

私はテーマを完全に最初から構築してきました、そしてこれまでの直接的なプロセスの後、comments.phpファイルに到達しました。繰り返しになりますが、これまでのところ、これ以外にはありません。

$ callback(文字列)(オプション)各コメントを開いて表示するために使用するカスタム関数の名前。これを使用すると、カスタム関数が各コメントを表示するために呼び出され、この点ですべての内部WordPress機能がバイパスされます。 HTMLレイアウトの極端な変更に合わせてコメント表示をカスタマイズするために使用します。コールバックには開始スタイルの<div><ol>、または<ul>タグを含める必要がありますが、終了タグは含めないでください。 WordPressが自動的に終了タグを提供するか、またはこのデフォルトを上書きするためにコールバック終了を使用することができます。コールバックは、階層型コメントを容易にするためにコールバック終了とは別のものです。慎重に使用してください。

なぜこれはそんなに怒っているのですか?各コメントに使用されるcomment.phpテンプレートを用意する方法がないのはなぜですか。 (もしあれば、教えてください)

3
Jack

単純なテンプレートファイルを好む場合は、カスタムコメントコールバックを使用しても可能です。

カスタムコールバックハンドラを使ってwp_list_comments()を呼び出します。

wp_list_comments( 
    array( 
        'callback' => 'custom_comment_callback', 
        'style'    => 'ol' 
    ) 
);

そのコールバック関数をとても単純にしましょう:

function custom_comment_callback( $comment, $args, $depth )
{
    include 'comment-template.php';
}

そして今、あなたは他のテンプレートのようにcomment-template.phpを使うことができます。

利用可能な変数を示す簡単な例を示します。

<?php # -*- coding: utf-8 -*-
print '<pre>$comment = ' . esc_html( var_export( $comment, TRUE ) ) . '</pre>';
print '<pre>$args = '    . esc_html( var_export( $args, TRUE ) )    . '</pre>';
print '<pre>$depth = '   . esc_html( var_export( $depth, TRUE ) )   . '</pre>';

こちらのTwenty Twelveからのような既存のコールバックハンドラの関数本体を使用することもできます。

<?php # -*- coding: utf-8 -*-
$GLOBALS['comment'] = $comment;
switch ( $comment->comment_type ) :
case 'pingback' :
case 'trackback' :
    // Display trackbacks differently than normal comments.
    ?>
    <li <?php comment_class(); ?> id="comment-<?php comment_ID(); ?>">
        <p><?php _e( 'Pingback:', 'twentytwelve' ); ?> <?php comment_author_link(); ?> <?php edit_comment_link( __( '(Edit)', 'twentytwelve' ), '<span class="edit-link">', '</span>' ); ?></p>
    <?php
            break;
        default :
        // Proceed with normal comments.
        global $post;
    ?>
    <li <?php comment_class(); ?> id="li-comment-<?php comment_ID(); ?>">
        <article id="comment-<?php comment_ID(); ?>" class="comment">
            <header class="comment-meta comment-author vcard">
                <?php
                    echo get_avatar( $comment, 44 );
                    printf( '<cite class="fn">%1$s %2$s</cite>',
                        get_comment_author_link(),
                        // If current post author is also comment author, make it known visually.
                        ( $comment->user_id === $post->post_author ) ? '<span> ' . __( 'Post author', 'twentytwelve' ) . '</span>' : ''
                    );
                    printf( '<a href="%1$s"><time datetime="%2$s">%3$s</time></a>',
                        esc_url( get_comment_link( $comment->comment_ID ) ),
                        get_comment_time( 'c' ),
                        /* translators: 1: date, 2: time */
                        sprintf( __( '%1$s at %2$s', 'twentytwelve' ), get_comment_date(), get_comment_time() )
                    );
                ?>
            </header><!-- .comment-meta -->

            <?php if ( '0' == $comment->comment_approved ) : ?>
                <p class="comment-awaiting-moderation"><?php _e( 'Your comment is awaiting moderation.', 'twentytwelve' ); ?></p>
            <?php endif; ?>

            <section class="comment-content comment">
                <?php comment_text(); ?>
                <?php edit_comment_link( __( 'Edit', 'twentytwelve' ), '<p class="edit-link">', '</p>' ); ?>
            </section><!-- .comment-content -->

            <div class="reply">
                <?php comment_reply_link( array_merge( $args, array( 'reply_text' => __( 'Reply', 'twentytwelve' ), 'after' => ' <span>&darr;</span>', 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); ?>
            </div><!-- .reply -->
        </article><!-- #comment-## -->
    <?php
        break;
    endswitch; // end comment_type check
7
fuxia