如何按作者过滤 edit.php 上的帖子

How to filter posts by author on edit.php

假设用户访问了

的页面
http://mywpsite/wp-admin/edit.php?author=john-doe

假设有一位作者的名字是 'John Doe' 并且给定的作者有三个帖子。然而,当我访问该页面时,我看到一个空的网格,好像没有该作者创建的帖子。

我想搜索给定用户创建的帖子。根据我的研究,我可以看到人们声称这样的东西应该有效:

function posts_for_current_author($query) {

    if($query->is_admin) {

        global $user_ID;
        $query->set('author',  $user_ID);
    }
    return $query;
}
add_filter('pre_get_posts', 'posts_for_current_author');

Source.

然而,这里输入的是作者ID,但是,我不知道如何通过'john-doe' 的slug 获取作者的ID。

如何通过 slug 获取作者 ID 并根据该 ID 搜索帖子?

编辑:

根据 NATH 的评论,这是一次失败的尝试:

function wpshock_search_filter( $query ) {
    if ((is_admin()) && (isset($_GET["author"])) && (preg_match('/[^a-zA-Z_0-9]/i', $_GET["author"]))) {
        $query->set("author_name", $_GET["author"]);
    }
    return $query;
}
add_filter('pre_get_posts','wpshock_search_filter');

查询仍然returns没有元素。我已经 var_dumped $query 并且看到 $query->query["author"] 有文本问题,这是一个潜在的问题。此外,$query->tax_query 包含与作者相关的数据。如果这个问题值得否决,我很抱歉,我认为其他人也可能对 Wordpress 的数据库处理感到困惑,因此这个问题可能会有用。也许我错了。

这应该适合你:

get_user_by('slug','john-doe');

编辑: 从这里你可以获得作者对象,你可以继续你的代码。

Link

看到这个-

https://wordpress.stackexchange.com/questions/89990/how-we-can-get-the-author-id-by-its-name

而且,获取作者帖子的更好方法是-

get_posts('author'=>AUTHOR_ID);

WordPress 为您提供了一个 author_name 查询变量。您可以默认使用以下内容:

http://mywpsite/wp-admin/edit.php?author_name=john-doe

详细了解 public 查询变量 in the Codex

我正在研究 wp 前端并达到与您要求的类似的功能

您提供的代码在 wp-admin 页面上有效,但任何使用该代码的人都会阻止他自己的 SuperAdmin 帐户表单审查其他编辑的帖子。
只需将 !is_super_admin() 添加到您的第一个条件中:-

if($query->is_admin && !is_super_admin() )

顺便说一句,作者的 ID 已经提供 global $user_ID; 当您添加此 $query->set('author',$user_ID); 时,主查询将根据作者 ID 过滤帖子结果,请参阅 WP_Query();