在一个类似的用例场景中,我有一个客户机,它有5个位置可以分配给用户。这需要为您进行更改,因为它基于分配给用户和帖子的位置,而您只是将整个帖子分配给用户,而不是匹配帖子元。
function filter_by_user_club( $query ) {
if( is_admin() ) {
$user_id = get_current_user_id();
$user_location = get_user_meta( $user_id, \'myplugin_user_location\', true );
$currentscreen = get_current_screen();
if ( $currentscreen->post_type == \'custom_post_type\' ) {
if( !empty( $user_location ) ) {
$location_meta_query = array(
\'key\' => \'cpt_location\',
\'value\' => $user_location,
\'compare\' => \'IN\'
);
$query->set(\'meta_query\', array( $location_meta_query ) );
}
}
}
add_action( \'pre_get_posts\', \'filter_by_user_club\', 9998 );
我猜,如果我正确理解了你的结构,这种修改将需要应用于你的方法。。。
您需要更改meta_query
而是使用post_in
, 像这样:
function filter_by_user_club( $query ) {
if( is_admin() ) {
$user_id = get_current_user_id();
$user_clubs = get_user_meta( $user_id, \'myplugin_user_clubs\', true );
$currentscreen = get_current_screen();
if ( $currentscreen->post_type == \'club_post_type\' ) {
if( !empty( $user_clubs ) ) {
//if you\'ve saved the user club IDs as an array (recommended)
$query->set(\'post_in\', $user_clubs );
//if you\'ve saved the user club IDs as a string use this...
//$query->set(\'post_in\', array( $user_clubs ) );
}
}
}
add_action( \'pre_get_posts\', \'filter_by_user_club\', 9998 );
显然,要获得与用户相关联的俱乐部ID还有很多工作要做,等等。但这将根据用户过滤俱乐部帖子类型列表。
我们正在使用$query->set()
本质上是在屏幕的默认值中添加一个参数get_posts()
查询虽然这里的查询在默认情况下会获取所有帖子(根据每个屏幕设置的帖子数量分页),但我们现在告诉它只显示posts_in
检查用户与哪些俱乐部关联时提供的数组。