wake-up-neo.com

Post-IDs in WP_Query () aufnehmen

Ich weise einige Beiträge einigen Benutzern zu, die nicht der Autor dieser Beiträge sind. In der Regel sind private Posts nur für die Autoren der Posts sichtbar. Wenn der Autor 3 Posts hat, erhält er auf seinem eingeloggten edit.php 3 Posts. Wie kann ich den Beitrag der Beitragslistentabelle hinzufügen, wenn ihnen ein anderer Beitrag über ein benutzerdefiniertes Feld zugewiesen wurde (nicht als Beitragsautor)?

Was ich bisher versucht habe, ist: Erstellen einer Funktion (custom_get_assigned_posts()) zum Abrufen aller Posts, die einer user_id als Array zugewiesen sind. Dann stellte sich jedoch heraus, dass es nicht einfach ist, Beitrags-IDs in die vorhandene Abfrage einzubeziehen:

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' );

Aber post__in enthält nicht zusätzlich Dinge, sondern spezifiziert die abzurufenden Beiträge.

Wie kann ich Posts einschließen, die einem Nichtautor von Posts zugewiesen sind und von postmeta zugewiesen werden?

3
Mayeenul Islam

Ich denke, Sie sollten dies mit dem user_has_cap filter tun können.

Da dieser Filter die Beitrags-ID im $args für die edit_post-Funktion durchläuft, können Sie damit prüfen, ob dem aktuellen Benutzer diese Funktion künstlich zugewiesen wurde. Wenn dies der Fall ist, müssen Sie die edit_post-Funktion für diese Instanz auf true setzen.

Aufbauend auf dem Beispiel in den oben verlinkten Dokumenten sehen Sie ungefähr so ​​aus:

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;

}

Dies ist ziemlich schnell zusammengestellt und ungetestet, sodass Sie es auf jeden Fall testen und an Ihre Bedürfnisse anpassen möchten, aber ich denke, das wird Ihnen das bringen, was Sie wollen. Passen Sie den oben genannten meta_key natürlich an den gewünschten Schlüssel an.

Verweise:

2
Tim Malone