首页 > 编程问答 >从查询中删除作者 ID

从查询中删除作者 ID

时间:2024-06-06 12:29:23浏览次数:26  
标签:php wordpress wordpress-theming custom-wordpress-pages

我有一些文章的作者被指定为共同作者。如果我想在我的作者页面上显示他们,他们却没有被列出。因为查询中的这个条件:

AND (wp_posts.post_author = 53)
AND (wp_posts.post_author = 53)

我该如何删除它?或者有没有更好的解决方案?

public static function pre_get_posts($query)
{
  if ($query->is_author() && $query->is_main_query()):
    $author = (get_query_var('author_name')) ? get_user_by('slug', get_query_var('author_name')) : get_userdata(get_query_var('author'));
    $authorPostIDs = self::getAuthorsPostIDs($author->ID);
    $coAuthorPostIDs = self::getCoAuthorsPostsIDs($author->ID);
    $postIDs = array_unique(
      array_merge($coAuthorPostIDs, $authorPostIDs), SORT_REGULAR
    );

    $query->set('post__in', $postIDs);
    $query->set('post_status', 'publish');
  endif;
}
我的完整查询:

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
其中 1=1
AND wp_posts.ID IN (349956,327745)
AND (wp_posts.post_author = 53)
AND wp_posts.post_type = "post
AND ((wp_posts.post_status = 'publish'))
ORDER BY wp_posts.post_date DESC
LIMIT 0, 10

是对的, AND (wp_posts.post_author = 53) 这一行限制了查询结果,只显示 ID 为 53 的作者的文章。为了显示共同作者的文章,需要修改查询,使其包含所有共同作者的 ID。

以下是一些解决方案:

1. 使用 IN 运算符:

可以将 = 替换为 IN ,并将所有共同作者的 ID 包含在一个数组中:

sql SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.ID IN (349956,327745) AND wp_posts.post_author IN (53, /* 其他共同作者ID */) AND wp_posts.post_type = "post" AND ((wp_posts.post_status = 'publish')) ORDER BY wp_posts.post_date DESC LIMIT 0, 10

在的 pre_get_posts 函数中,可以通过以下方式获取所有共同作者的 ID:

```php $coAuthorIDs = []; foreach ($coAuthorPostIDs as $coAuthorPostID) { $coAuthorIDs[] = get_post_field( 'post_author', $coAuthorPostID ); } $authorIDs = array_unique(array_merge([$author->ID], $coAuthorIDs), SORT_REGULAR);

$query->set('author__in', $authorIDs); ```

注意: 这里使用了 author__in 参数,而不是直接修改 SQL 查询。

2. 使用联表查询:

可以使用联表查询,从存储共同作者信息的表中获取作者 ID。假设使用的是 "Co-Authors Plus" 插件,该插件将共同作者信息存储在 wp_coauthors 表中:

sql SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts JOIN wp_coauthors ON wp_posts.ID = wp_coauthors.post_id WHERE 1=1 AND wp_posts.ID IN (349956,327745) AND (wp_coauthors.author_id = 53 OR wp_posts.post_author = 53) AND wp_posts.post_type = "post" AND ((wp_posts.post_status = 'publish')) ORDER BY wp_posts.post_date DESC LIMIT 0, 10

这个查询将返回 ID 为 53 的作者以及与该作者共同撰写文章的所有作者的文章。

需要根据使用的插件或方法调整联表查询。

建议:

  • 使用 WordPress 提供的 API: 尽量使用 WordPress 提供的 API(如 author__in 参数)来修改查询,而不是直接编写 SQL 代码。这样可以提高代码的可读性和可维护性。
  • 调试: 使用 var_dump($query->request); 打印修改后的 SQL 查询,确保其符合预期。

请根据使用的共同作者插件或方法选择合适的解决方案,并更新的 pre_get_posts 函数以构建正确的查询。

标签:php,wordpress,wordpress-theming,custom-wordpress-pages
From: 52312914

相关文章