web-dev-qa-db-ja.com

プロフィールページに著者のコメントを表示する

私は彼らのプロフィールページ(author.php)に著者のコメントを表示しようとしています、しかし私が試みた両方のコードは皆のコメントを表示するようです。また、2番目のコードは特定のコメントにリンクすることを想定していますが、代わりに何もしません。また、コメントIDはすでにコメント出力に追加されており、正常に印刷されます。任意の助けは大歓迎です。

// Method 1
<ul class="authpcom">
<?php
$author_email = get_the_author_meta( 'user_email' ); 

$args = array(
    'author_email' => $author_email
);
$comments = get_comments($args);
foreach($comments as $comment) :
    echo('<a href=" ' . get_permalink($comment->post_ID) . ' " rel="external nofollow" title=" ' . $title . ' ">' .$title . '</a><br />' . $comment->comment_date . '<br /><li>' . $comment->comment_content . '</li>');
endforeach;
?>
</ul>


// Method 2
<?php   $comments = get_comments(); ?>
<ul id="recent_comments">
<?php foreach ($comments as $comment) { ?>
<li><p><strong><?php
        $title = get_the_title($comment->comment_post_ID);
        echo get_avatar( $comment, '45' );
echo strip_tags($comment->comment_author); ?></strong>&nbsp;commented on <a href="<?php echo get_permalink($comment->comment_post_ID); ?>#comment-<?php echo $comment->comment_ID; ?>" rel="external nofollow" title="<?php echo $title; ?>"> <?php echo $title; ?></a>: <?php echo wp_html_excerpt( $comment->comment_content, 45 ); ?> (...)</p></li>
<?php }  ?>
</ul>

コメント出力部に使用 -

$comment->comment_ID

object(WP_User)#345(7){["data"] => object(stdClass)#344(10){["ID"] => string(1) "2" ["user_login"] => string( 6) "agent1" ["user_pass"] => string(34) "$ P $ BXUSPFSBfmyIrjZ2YUnbIs1GwjkdH50" ["user_nicename"] =>文字列(6) "agent1" ["user_email"] => string(19) homekast.com "[" user_url "] =>文字列(0)" "[" user_registered "] =>文字列(19)" 2015-07-25 10:33:27 "[" user_activation_key "] =>文字列(0) ) "" ["user_status"] =>文字列(1) "0" ["display_name"] =>文字列(9) "John Paul"} ["ID"] => int(2)["caps"] = > array(1){["agent"] =>ブール値(true)} ["cap_key"] =>文字列(15) "tr_capabilities" ["role"] =>配列(1){[0] =>文字列(5) "agent"} ["allcaps"] =>配列(2){["read"] => bool(true)["agent"] => bool(true)} ["filter"] => NULL }

5
Rich

ここで使用する必要があるのは WP_Comment_Query() 関数です。

author.phpページでは、次のようにして簡単に作者情報とIDを取得できます。

// get author info
$curauth = (isset($_GET['author_name'])) ? get_user_by('slug', $author_name) : get_userdata(intval($author));

// set ID
$user_id = $curauth->ID;

それから、クエリ引数配列にユーザーIDを追加します。

$args = array(
    'user_id' => $user_id, // comments by this user only
    'status' => 'approve',
    'post_status' => 'publish',
    'post_type' => 'post'
);

そして最後に、wp_comment_query()の引数に当たります。

// The Query
$comments_query = new WP_Comment_Query;
$comments = $comments_query->query( $args );

// Comment Loop
if ( $comments ) {
    foreach ( $comments as $comment ) {
        echo '<p>' . $comment->comment_content . '</p>';
    }
} else {
    echo 'No comments found.';
}

追加されたbonusとして、私はページングがwp_comment_query()とどのように連携するのかを昔から調査し、 ここで良い解決策を提供しています 。それをうまく機能させるのは、ちょっと変なことでした。

編集:

著者IDを取得するためのより良い方法は(props @Pieter)を使うことです。

$user_id = get_queried_object_id();
5

1つ目の方法は、get_the_author_metaの2番目のパラメーター、つまり作成者のIDが欠落していることです。

2番目の方法は、未定義の変数を使用していることです。このコードを確認してください。

// Method 1
<ul class="authpcom">
    <?php
        $queried_object = get_queried_object();
        $author_email = get_the_author_meta( 'user_email', $queried_object->ID ); 

        $args = array(
            'author_email' => $author_email
        );
        $comments = get_comments($args);
        foreach($comments as $comment) :
            echo '<a href=" ' . get_permalink( $comment->comment_post_ID ) . ' " rel="external nofollow" title=" ' . get_the_title( $comment->comment_post_ID ) . ' ">' . get_the_title( $comment->comment_post_ID ) . '</a><br />' . $comment->comment_date . '<br /><li>' . $comment->comment_content . '</li>';
        endforeach;
    ?>
</ul>


// Method 2
<?php
    $comments = get_comments();
?>
<ul id="recent_comments">
<?php foreach ($comments as $comment) { ?>
<li>
    <p>
        <strong>
        <?php
            echo get_avatar( $comment->comment_author_email, '45' );
            echo strip_tags($comment->comment_author);
        ?>
        </strong>
        &nbsp;commented on <a href="<?php echo get_permalink( $comment->comment_post_ID ); ?>#comment-<?php echo $comment->comment_ID; ?>" rel="external nofollow" title="<?php echo get_the_title( $comment->comment_post_ID ); ?>"> <?php echo get_the_title( $comment->comment_post_ID ); ?></a>: <?php echo wp_html_excerpt( $comment->comment_content, 45 ); ?> (...)
    </p>
</li>
<?php }  ?>
</ul>

編集: (09/05/2015)

// Method 1
<ul class="authpcom">
    <?php
        $authorID = get_queried_object_id();
        $author_email = get_the_author_meta( 'user_email', $authorID ); 

        $args = array(
            'user_id' => $authorID,
        );
        $comments = get_comments($args);
        if ( $comments ) {
            foreach($comments as $comment) {
                echo '<li><a href="' . get_permalink( $comment->comment_post_ID ) . '" rel="external nofollow" title="' . get_the_title( $comment->comment_post_ID ) . '">' . get_the_title( $comment->comment_post_ID ) . '</a><br>' . $comment->comment_date . '<br>' . $comment->comment_content . '</li>';
            }
        } else {
            echo '<li>No Comments from this Author</li>';
        }
    ?>
</ul>
1
Abhik

究極のメンバー pluginを使ってこれを達成することができます。ユーザープロフィールで多くのことができるように思えますが、プロフィールページにユーザーのコメントを表示するのにも適しているように見えます。

ユーザープロフィールに投稿者のコメントとコメントを表示する

0
tillinberlin