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

时间:2015-10-12 13:57:30

标签: php wordpress filter filtering

假设用户访问

页面
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'的段落来获取作者的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');

查询仍然不返回任何元素。我var_dump编辑$query并看到$query->query["author"]有文字问题,这是一个潜在的问题。此外,$query->tax_query包含与作者相关的数据。我很抱歉,如果这个问题值得投票,我认为其他人也可能会被W​​ordpress的数据库处理所困惑,因此这个问题可能会有用。也许我错了。

4 个答案:

答案 0 :(得分:2)

这应该适合你:

charT()

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

Link

答案 1 :(得分:1)

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

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

详细了解公共查询变量in the Codex

答案 2 :(得分:1)

我正在wp前端wotking并达到你所要求的类似功能

您提供的代码是wp-admin页面上的当前代码,但是任何人都使用该代码来阻止他自己的SuperAdmin帐户表单查看其他编辑帖子。
    只需将!is_super_admin()添加到您的第一个会议中,如下所示: -

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

BTW作者的ID已经提供global $user_ID; 当您添加此$query->set('author',$user_ID);时,主查询会过滤发布作者ID的帖子结果,请参阅WP_Query();

答案 3 :(得分:0)

见这 -

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

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

get_posts('author'=>AUTHOR_ID);