web-dev-qa-db-ja.com

get_posts()はユーザ権限を考慮しません

私のWPにログインしているユーザーの投稿へのリンクのリストを表示したいです。それで私はそうし始めました:

$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;
}

しかし、それは関数がユーザーの能力を気にしないようです。私は「グループ」と呼ばれるプラグインを使用して投稿を表示する機能を要求します。機能がない場合、ページの至る所で投稿は非表示になります。 wpはget_posts()そのものを使っているので混乱しています。これを達成する方法?

// Ravsのヒントを通して、私はこのアプローチをとることができた:私はプラグイングループを拡張した:

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;
}

そして私がすでに実験したようにフィルタを適用しました:

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

ありがとうございました。

1
No3x

is_user_logged_in を使用

あなたのコードは好きかもしれません

$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
  }
}

:ユーザーのログインとその役割または機能に応じて投稿リンクを詳細に表示する場合は、 current_user_can を使用します。

1
Ravinder Kumar