我有一个网站,有3种不同的自定义帖子类型(列表、联系人、事件)和大约1600个“作者”。我想做的只是在后台显示作者的帖子。所以当authorA登录并单击“列表”时,他们只会看到自己的帖子。
我在函数中运行了这段代码。php来控制第一个post类型,但不确定如何控制另外两个。我看到的问题是,当authorA单击“事件”时,他们在“列表”中的帖子就会显示出来。
function __set_all_posts_for_author( &$query )
{
if ( $query->is_author )
$query->set( \'post_type\', \'listings\' );
remove_action( \'pre_get_posts\', \'__set_all_posts_for_author\' ); // run once!
}
add_action( \'pre_get_posts\', \'__set_all_posts_for_author\' );
所以,我想我只需要将“列表”更改为所有三种显示的帖子类型,但我不确定如何。。。。有什么想法吗?
SO网友:gmazzap
正如@s\\u ha\\u dum在评论中所说,您的描述和代码似乎有所不同。
如果我理解描述,那么执行您想要的操作的代码是:
function __set_all_posts_for_author( $query ) {
if ( is_admin() && is_post_type_archive( array(\'listings\', \'contacts\', \'events\') ) ) {
$current_user = wp_get_current_user();
$query->set( \'author\', $current_user->ID );
}
}
add_action( \'pre_get_posts\', \'__set_all_posts_for_author\' );
使用上述代码,每次登录后端的用户需要CPT“列表”、“联系人”和“事件”的项目列表时,他/她将只看到自己创建的帖子。
SO网友:John
你可以创建一个作者。然后抓取作者及其帖子。
<?php
$curauth = (isset($_GET[\'author_name\'])) ? get_user_by(\'slug\', $author_name) : get_userdata(intval($author));
query_posts( array(
\'post_type\' => array(\'post\',\'custom_post_type\'),
\'author\' => $author,
\'posts_per_page\' => -1 )
);
?>
将custom\\u post\\u type替换为您的CPT名称。在post\\u类型数组中使用您拥有/需要的尽可能多的值。