pre_get_posts на основе мета автора и мета текущего пользователя - PullRequest
0 голосов
/ 30 марта 2020

Я создал тип сообщения 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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...