web-dev-qa-db-fra.com

Inclure post id [s] dans WP_Query ()

J'attribue des publications à des utilisateurs qui ne sont pas l'auteur de ces publications. Les publications privées ne sont généralement visibles que par leurs auteurs. Ainsi, si l'auteur a 3 messages, il aura 3 messages sur son edit.php connecté. Mais si un autre poste leur est attribué par champ personnalisé (et non en tant qu'auteur de publication), comment puis-je l'ajouter au tableau de la liste des publications?

Ce que j’ai essayé jusqu’à présent, c’est de créer une fonction (custom_get_assigned_posts()) pour récupérer tous les articles affectés à un user_id sous forme de tableau. Mais nous avons alors constaté qu’il n’y avait pas de moyen facile d’inclure des ID de poste dans la requête existante:

function add_assigned_posts( $query ) {
    if( is_admin() && in_array( $query->get('post_type'), array('mycpt') ) ) {
        global $current_user;
        $query->set('post__in', custom_get_assigned_posts( $current_user->ID ) );
    }
    return $query;
}
add_filter( 'pre_get_posts', 'add_assigned_posts' );

Mais post__in n'inclut pas en plus de choses, il a en fait spécifié les publications à récupérer.

Comment puis-je inclure des publications attribuées à un non-auteur de publications et attribuées par postmeta?

3
Mayeenul Islam

Je pense que vous devriez pouvoir le faire avec le filtre user_has_cap .

Etant donné que ce filtre traverse l'ID de publication dans $args pour la capacité edit_post, vous pouvez l'utiliser pour vérifier si cette capacité a été offerte artificiellement à l'utilisateur actuel - et si c'est le cas, forcez la capacité edit_post à la valeur true pour cette instance.

En vous basant sur l'exemple des documents liés ci-dessus, vous obtiendrez quelque chose comme ceci:

add_filter( 'user_has_cap', 'wpse_227418_edit_extra_posts', 10, 3 );

function wpse_227418_edit_extra_posts($allcaps, $cap, $args){

  if($args[0] != "edit_post"){
    return $allcaps; // bail out, we're not talking about editing a post here
  }

  if(get_post_meta($args[2], "additional_author", true) == $args[1]){
    // get the meta key 'additional author', checking that it matches the User ID we're looking at the capabilities for
    $allcaps[$cap[0]] = true; // make sure edit_posts is true for this author and this post ID
  }

  return $allcaps;

}

Ceci est assez rapidement mis en place et n'a pas encore été testé. Vous voudrez certainement le tester et le modifier selon vos besoins, mais je pense que cela vous donnera ce que vous voulez. Bien sûr, ajustez la meta_key mentionnée ci-dessus pour qu'elle corresponde à la clé recherchée.

Références:

2
Tim Malone