web-dev-qa-db-fra.com

comment pourrais-je créer une requête personnalisée pour obtenir tous les utilisateurs et une publication associée basée sur un champ postmeta?

J'ai environ 50 utilisateurs. C'est assez facile de tous les énumérer. Cependant, ils sont associés à un type de publication personnalisé spécial via un champ postmeta appelé wpp_agents.

J'ai donc besoin de lister les utilisateurs, mais aussi le titre de l'article (lié à l'article).

  1. Utilisateur 1 | Message de l'utilisateur 1 (lié)
  2. Utilisateur 2 | Message de l'utilisateur 2 (lié)
  3. etc...

Je suis un mysql mais je suis assez d'accord avec php.

Voici ce avec quoi je joue:

$data = $wpdb->get_results(
    "SELECT $wpdb->users*,
        "SELECT display_name, user_email 
     FROM $wpdb->users 
     LEFT JOIN $wpdb->usermeta ON
      user.ID=wpp_agents;",
    ARRAY_A
);

mais ce n'est pas juste.

Je crois que j'ai besoin de SELECT * FROM $ wpdb-> utilisateurs LEFT JOIN $ wpdb-> postmeta

mais alors pas sûr.

toute aide est grandement appréciée.

1
TJ Sherrill

Heureusement, il existe une fonction qui va générer exactement cette chaîne de requête pour vous (toujours en train de rire :)).

Le voici: get_posts_by_author_sql @ queryposts.com , qui ressemble à la source principale .

En détail, il construit la partie WHERE pour vous, que vous pouvez insérer dans votre requête.

Donc, introduisez simplement l'ID utilisateur et construisez votre chaîne que vous pouvez utiliser dans votre requête:

foreach ( $users as $user )
{
    $where = get_posts_by_author_sql( 'wpp_agents', true, $user->ID );

    echo '<pre>';
    var_dump( $where );
    echo '</pre>';
}

Examinez cette question pour savoir comment intercepter le filtre posts_clauses (ou même mieux le posts_where).

Peut-être trouvez-vous un moyen de modifier simplement la requête principale pour la cracher lors d’un seul appel. Astuce: Vous devriez avoir un mécanisme de cache sérieux ou ajouter le résultat comme transitoire. Cela peut devenir intense.

1
kaiser