web-dev-qa-db-fra.com

pre_get_posts OR relation entre taxonomie et auteur

J'ai une taxonomie personnalisée appelée coauthor. Sur l'écran edit.php, j'essaie de filtrer et d'afficher uniquement les publications créées par l'utilisateur actuelOUpublications co-créées par l'utilisateur actuel. Je peux obtenir les messagesauthoredde l'utilisateur actuel:

function get_authored_posts($query) {
    global $user_ID;
    $query->set('author',  $user_ID);
    return $query;
}
add_filter('pre_get_posts', 'get_authored_posts');

Je peux aussi obtenir les messagescoauthoredde l'utilisateur actuel:

function get_coauthored_posts($query) {
    global $user_ID;
    $user = get_userdata($user_ID);
    $query->set('taxonomy', 'coauthor');
    $query->set('term', $user->user_login);
    return $query;
}
add_filter('pre_get_posts', 'get_coauthored_posts');

Je crois que les résultats ont généré des messages rédigésETcoautés par l'utilisateur actuel. Je suis à la recherche de messages rédigésOUcoautés par l'utilisateur actuel. J'attends que les résultats de la première et les résultats de la seconde soient affichés.

Remarque: Pour clarifier,coauthorssont stockés en tant que termes dans la taxonomie coauthor. Le terme est la valeur user_login.

== EDIT ==

Je stocke actuellement l'auteur en tant que co-auteur. J'ai l'impression que c'est un "travail" pour une meilleure solution. Comment/Puis-je utiliser une requête directe (en ignorant l'objet WP_Query) et la renvoyer à partir du filtre pre_get_posts?

3
v0idless

Lorsque j'ai implémenté quelque chose de similaire pour une entreprise qui avait besoin de plusieurs auteurs, nous avons fait la même chose avec une taxonomie d'auteur. Mais dans ce cas, nous n’utilisons pas du tout le champ auteur original.

En principe, il n'est pas possible de créer un WP_Query standard avec author = X OR coauthor = Y à l'aide de méthodes standard. Vous devrez recourir à la manipulation directe de SQL, ce qui est problématique et sujet aux ruptures accidentelles.

Cependant, en utilisant exclusivement la taxonomie des coauteurs, il est assez simple de créer un tax_query dont le coauteur est IN (X, Y).

Donc non, ce n'est pas vraiment une solution de contournement, c'est en fait la meilleure façon de le faire. La table des messages est entièrement destinée à un seul auteur. Si vous avez besoin de plusieurs auteurs, alors en inclure un dans ce champ post_author est en fait le vrai WTF ici, car pourquoi s'embêter? Il est plus judicieux d'utiliser la taxonomie à la place et de permettre un système de co-auteur totalement multi-connecté.

3
Otto

Je ne sais pas si vous pouvez facilement ajouter OR requêtes à l'objet $ query.

Cela semble possible lorsque vous interrogez sur des méta-informations, par exemple:

 $args = array(
    'post_type' => 'product',
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key' => 'color',
            'value' => 'blue',
            'compare' => 'NOT LIKE'
        ),
        array(
            'key' => 'price',
            'value' => array( 20, 100 ),
            'type' => 'numeric',
            'compare' => 'BETWEEN'
        )
    )
  );
 $query = new WP_Query( $args );

Notez le paramètre 'relation'. Ceci est pris vers le bas de cette page de codex: http://codex.wordpress.org/Class_Reference/WP_Query


Une alternative serait de stocker l'auteur en tant que coauteur.

2
ZweiBlumen