Я создал тип сообщения volunteer_events
, и у каждого пользователя есть мета-ключ account_type
, значения которого: разрешение 1, разрешение 2, разрешение 3, разрешение 4 и т. Д. c.
Я хочу фильтровать сообщения volunteer_events
по уровням разрешений. Я хотел бы, чтобы пользователи с разрешением 1 могли просматривать события автора с мета-значением разрешения 1 пользователя. Затем я хотел бы, чтобы пользователи с разрешением 2 могли просматривать только события авторов с мета-значением разрешения 2 пользователя.
Я использую pre_get_posts , чтобы сделать это, но это не совсем работает, как ожидалось. В настоящее время он показывает все, независимо от мета-проверок.
/**
* Modify Event Queries
*
* @param WP_Query Object $query
*/
function sc_filter_query_based_on_permissions( $query ) {
// If we're on admin side, return
if( is_admin() ) {
return;
}
// Only apply volunteer_events post type
if( $query->is_main_query() && $query->query_vars['post_type'] == 'volunteer_events' ) {
//Get current user meta to check for permissions
$currentUserType = get_user_meta( get_current_user_id(), 'account_type', true );
if($currentUserType === 'permission 1'){
// Get all users with this meta value and filter their posts
$users = new WP_User_Query( array(
'meta_key' => 'account_type',
'meta_value' => 'permission 1',
'fields' => 'ID',
) );
$authors = $users->get_results();
if( ! empty( $authors ) ) {
$query->set( 'author__in', $authors );
}
} elseif ($currentUserType === 'permission 2') {
// Get all users with this meta value and filter their posts
$users = new WP_User_Query( array(
'meta_key' => 'account_type',
'meta_value' => 'permission 2',
'fields' => 'ID',
) );
$authors = $users->get_results();
if( ! empty( $authors ) ) {
$query->set( 'author__in', $authors );
}
} //end currentUserType
//else means user has permissions to view all events
}
}
add_action( 'pre_get_posts', 'sc_filter_query_based_on_permissions' );
Я уже проверил следующие ресурсы, что я делаю неправильно и как я могу заставить эту работу работать? Это даже лучший способ без необходимости изменять все мои собственные wp_queries?
new Wp_Query () или pre_get_posts () для просмотра ВСЕХ сообщений для пользовательского типа сообщения?
https://wordpress.stackexchange.com/questions/237739/pre-get-posts-only-get-posts-by-wp-usermeta-value
https://remicorson.com/modifying-the-current-query-with-pre_get_posts/