我曾经做过类似的事情。
我需要为特定客户附加一个或多个CPT。
我制作了一个可搜索的选择框,其中包含CPT编辑屏幕中的所有用户,仅对管理员可用。
管理员将创建帖子,保存它,然后将帖子的作者更改为所需的客户用户名。
我之所以选择走这条路是因为cannot 分配给用户,除非该用户是author. 您还可以尝试向您的帖子类型添加一个元框,该元框将包含您的帖子要按元键过滤的授权用户。但是通过使用此方法,您可以轻松地使用主查询进行筛选。这只是一个改变你帖子所有权的问题。我想这一切都取决于你项目的性质。
然后我有了一个脚本,可以过滤类似这样的帖子。
请注意,此代码是一个总体概念。根据我的记忆写作。
add_action( \'pre_get_posts\', \'wpse_show_user_posts\');
function wpse_show_user_posts( $query ){
// Don\'t filter if user is an administrator
if ( current_user_can( \'list_users\' ) )
return;
// Get all posts which our current user is an author for
if( is_user_logged_in() && $query->is_main_query() ){
$current_user = wp_get_current_user();
$query->set( \'author\', $current_user->ID );
}
// Hide all posts otherwise
if( $query->is_main_query() ) {
$query->set( \'category__not_in\', \'1\' ); // Use the id of the retricted category
}
return $query;
}
当然,您可能希望使用具有适当功能的自定义角色,以便更好地控制用户的操作。要知道,任何用户都可以是帖子作者,但帖子编辑屏幕上的默认作者元框选择字段将只返回至少
contributor 角色(还具有delete\\u posts功能)。因此,我创建了一个自定义选择框,从自定义角色返回用户。
您也可能只将受限内容返回给登录用户。
add_filter( \'the_content\', \'logged_in_only\' );
function logged_in_only( $content ){
$categories = get_the_category();
$cat_not_in = \'some-cat\';
$include_post = true;
foreach( $categories as $category ){
if( $category->slug == $cat_not_in )
$include_post = false;
}
if( is_user_logged_in() || $include_post ) {
return $content;
}
return \'You need to log in <a href="\' . home_url( \'wp-login.php\') . \'">Here</a>\';
}
您需要创建
restricted
分类并将您希望控制的帖子分配给该类别,以便将这些帖子正确筛选给未登录的用户。