更新
为了响应更新问题中的新代码,您实际上可以使用
$wpdb->get_col()
通过JOIN子句使用单个SQL命令,如下所示:
$query = "SELECT c.comment_ID FROM $wpdb->comments c
JOIN $wpdb->posts p ON p.ID = c.comment_post_ID
WHERE c.user_id = $user_ID
OR p.post_author = $user_ID";
$comment_ids = $wpdb->get_col( $query );
但是,不是通过
pre_get_comments
hook你可以用
comments_clauses
hook 将上述JOIN子句和WHERE条件添加到由生成的SQL命令中
WP_Comment_Query
.
add_filter( \'comments_clauses\', function ( $pieces ) {
global $wpdb;
$user_ID = get_current_user_id();
if ( false === strpos( $pieces[\'join\'], "JOIN $wpdb->posts ON" ) ) {
$pieces[\'join\'] .= " JOIN $wpdb->posts ON {$wpdb->posts}.ID = comment_post_ID";
}
$pieces[\'where\'] .= " AND (user_id = $user_ID OR {$wpdb->posts}.post_author = $user_ID)";
return $pieces;
} );
因此,请尝试,它应该返回:
当前用户在任何帖子上发表的评论,以及
其他用户的评论,但仅限于当前用户是作者的帖子。
原始答案pre_get_comments
hook 实际上是WP_Comment_Query
class 而不是WP_Query
, 所以$wp_query->set()
不起作用,因为WP_Comment_Query
没有set()
方法
但您可以直接访问$query_vars
中的属性WP_Comment_Query
要更改查询参数的值,如user_id
. 例如,对于该参数,您可以使用$wp_query->query_vars[\'user_id\'] = $user_ID;
.
至于FIXME
部分,请尝试post_author
arg: $wp_query->query_vars[\'post_author\'] = $user_ID;
如果您确实试图在当前用户是作者的帖子上只显示当前用户的评论,那么这应该是可行的。
PS:我会重命名$wp_query
到$query
或者也许$wp_comment_query
.. 我也会使用$user_ID = get_current_user_id();
而不是依赖$user_ID
全局。