web-dev-qa-db-fra.com

get_posts () ne considère pas les permissions de l'utilisateur

Je souhaite afficher une liste de liens vers des publications pour l'utilisateur connecté sur mon wp. Alors j'ai commencé à le faire:

$posts_array = get_posts( array( 'post_type' => 'download', 'post_status' => 'publish' ) );
//$posts_array = apply_filters( 'downloads_shortcode', $posts_array );
foreach($posts_array as $post) {
    setup_postdata($post);
    $title = "<a href=". get_permalink( $post->ID ) . ">" . $post->post_title . "</a>";
    echo $title;
}

Mais il semble que la fonction ne se soucie pas des capacités de l'utilisateur. J'utilise un plugin appelé "Groupes" pour nécessiter une capacité d'affichage d'un message. Partout sur la page, les publications sont masquées, si une capacité est manquante. Je suis confus parce que wp utilise get_posts () lui-même. Comment y parvenir?

// par le biais de Ravs, j'ai pu faire cette approche: j'ai étendu le plugin Groupes:

add_filter( 'get_posts', array( __CLASS__, "get_posts" ), 1 );
/**
 * Filter posts by access capability.
 *
 * @param array $posts
 */
public static function get_posts( $posts ) {
    $result = array();
    $user_id = get_current_user_id();
    foreach ( $posts as $post ) {
        if ( self::user_can_read_post( $post->ID, $user_id ) ) {
            $result[] = $post;
        }
    }
    return $result;
}

et appliqué le filtre comme j'ai déjà expérimenté:

$posts_array = apply_filters( 'get_posts', $posts_array );

Je vous remercie.

1
No3x

Utilisez is_user_logged_in

votre code peut aimer

$posts_array = get_posts( array( 'post_type' => 'download', 'post_status' => 'publish' ) );
//$posts_array = apply_filters( 'downloads_shortcode', $posts_array );
foreach($posts_array as $post) {
    setup_postdata($post);
  if ( is_user_logged_in() ){
    $title = "<a href=". get_permalink( $post->ID ) . ">" . $post->post_title . "</a>";
    echo $title;
  }
  else{
    // do something
  }
}

Remarque : Si vous souhaitez afficher le dépôt du lien de publication après la connexion de l'utilisateur et son rôle ou ses fonctionnalités, utilisez current_user_can

1
Ravinder Kumar