我试图私下发表评论。我的意思是评论必须对帖子作者和评论作者可见。我创建自定义注释节“;更好的评论。php;。我使用了pre\\u get\\u评论,但我无法工作。请帮忙
<?php
// My custom comments output html
function better_comments( $comment, $args, $depth ) {
// Get correct tag used for the comments
if ( \'div\' === $args[\'style\'] ) {
$tag = \'div\';
$add_below = \'comment\';
} else {
$tag = \'li\';
$add_below = \'div-comment\';
} ?>
<<?php echo $tag; ?> <?php comment_class( empty( $args[\'has_children\'] ) ? \'\' : \'parent\' ); ?> id="comment-<?php comment_ID() ?>">
<?php
// Switch between different comment types
switch ( $comment->comment_type ) :
case \'pingback\' :
case \'trackback\' : ?>
<div class="pingback-entry"><span class="pingback-heading"><?php esc_html_e( \'Pingback:\', \'textdomain\' ); ?></span> <?php comment_author_link(); ?></div>
<?php
break;
default :
if ( \'div\' != $args[\'style\'] ) { ?>
<div id="div-comment-<?php comment_ID() ?>" class="comment-body">
<?php } ?>
<div class="comment-author vcard">
<?php
// Display avatar unless size is set to 0
if ( $args[\'avatar_size\'] != 0 ) {
$avatar_size = ! empty( $args[\'avatar_size\'] ) ? $args[\'avatar_size\'] : 70; // set default avatar size
echo get_avatar( $comment, $avatar_size );
}
// Display author name
printf( __( \'<cite class="fn">%s</cite> <span class="says">says:</span>\', \'textdomain\' ), get_comment_author_link() ); ?>
</div><!-- .comment-author -->
<div class="comment-details">
<div class="comment-meta commentmetadata">
<a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ); ?>"><?php
/* translators: 1: date, 2: time */
printf(
__( \'%1$s at %2$s\', \'textdomain\' ),
get_comment_date(),
get_comment_time()
); ?>
</a><?php
edit_comment_link( __( \'(Edit)\', \'textdomain\' ), \' \', \'\' ); ?>
</div><!-- .comment-meta -->
<div class="comment-text"><?php comment_text(); ?></div><!-- .comment-text -->
<?php
// Display comment moderation text
if ( $comment->comment_approved == \'0\' ) { ?>
<em class="comment-awaiting-moderation"><?php _e( \'Your comment is awaiting moderation.\', \'textdomain\' ); ?></em><br/><?php
} ?>
<div class="reply"><?php
// Display comment reply link
comment_reply_link( array_merge( $args, array(
\'add_below\' => $add_below,
\'depth\' => $depth,
\'max_depth\' => $args[\'max_depth\']
) ) ); ?>
</div>
</div><!-- .comment-details -->
<?php
if ( \'div\' != $args[\'style\'] ) { ?>
</div>
<?php }
// IMPORTANT: Note that we do NOT close the opening tag, WordPress does this for us
break;
endswitch; // End comment_type check.
}
SO网友:Tom J Nowell
您可以使用pre_get_comments
筛选以在获取注释之前修改注释查询的参数。特别是author_in
参数
我试着写一个例子,虽然我还没有测试过,但它类似于这样:
add_action( \'pre_get_comments\', \'author_and_self_comment_filter\' );
function author_and_self_filter( \\WP_Comment_Query $query ) : void {
// We need to do some checks first and return early if
// this filter doesn\'t apply, e.g. if you\'re the post
// author etc
// don\'t break the admin UI
if ( is_admin() ) {
return;
}
// only filter if we\'re grabbing the comments for a post
if ( $query->query_vars[\'post_id\'] === 0 ) {
return;
}
// only logged in users should see comments
if ( ! is_user_logged_in() ) {
// we need to return 0 results so I\'m asking for a
// comment type that doesn\'t exist so there are no
//results, there\'s probably a better way to do this:
$query->query_vars[\'type\'] = \'banana\';
return;
}
// this is already filtered to specific people! Skip!
if ( ! empty( $query->query_vars[\'author__in\'] ) ) {
return;
}
// Admins + super admins see everything!
if ( current_user_can( \'manage_options\' ) || is_super_admin() ) {
return;
}
// get my ID
$my_user_id = get_current_user_id();
// get the post author ID
$post_id = $query->query_vars[\'post_id\'];
$p = get_post( $post_id );
$post_author_id = $p->post_author;
// If I\'m the post author then I can see everything
if ( $my_user_id === $post_author_id ) {
return;
}
// now we need to set the `author_in` to an array with 2
// values, the authors user ID and the current users ID
$authors = [];
$authors[] = $my_user_id; // My user ID
$authors[] = $post_author_id; // Author ID
$query->query_vars[\'author_in\'] = $authors;
}
有一系列的检查来确定我们是否需要这样做,然后在最后我们将评论限制为仅针对作者和当前用户。
请注意,如果这样做,注释计数器将永远不会准确,并且可能非常不可靠。如果不取消限制,则无法对此进行修复,因此所有用户都可以看到所有注释。