web-dev-qa-db-fra.com

créer un shortcode pour lister les utilisateurs avec une valeur de clé méta spécifique

J'ai une fonction que j'utilise pour répertorier les utilisateurs dans un rôle spécifique, qui correspond à une valeur de méta-clé spécifique. Cela fonctionne quand je l'utilise directement sur la page ---

<?php 
$bmail = $current_user->user_email;
   $user_query = new WP_User_Query( array( 'meta_key' => 'broker_email', 'meta_value' => $bmail,  'fields' => 'all'  ) );
   $users = $user_query->get_results();

  if (!empty($users)) {
    echo '<ul>';
    foreach ($users as $user){
        echo '<li>' . $user->display_name . '</li>';
    }
    echo '</ul>';
  } else {
    echo 'No users found';
  };
?>

Mais quand j'essaie de créer un shortcode -

function thebroker_agents() {
  global $current_user;
$bmail = $current_user->user_email;
   $user_query = new WP_User_Query( array( 'meta_key' => 'broker_email', 'meta_value' => $bmail,  'fields' => 'all'  ) );
   $users = $user_query->get_results();
  if (!empty($users)) {
    echo '<ul>';
    foreach ($users as $user){
        echo '<li>' . $user->display_name . '</li>';
    }
    echo '</ul>';
  } else {
    echo 'No users found';
  }
// Adds the above function as as shortcode
add_shortcode( 'your_agents', 'thebroker_agents' );

Et appelez sur la même page comme si -

<?php echo do_shortcode('[your_agents]'); ?>

Il ne fait rien sauf faire écho au texte - "[vos_agents]"

Qu'est-ce que je fais mal avec ma fonction shortcode?

1
Rich

Essaye ça:

function thebroker_agents() {
    global $current_user;
    $bmail = $current_user->user_email;
    $user_query = new WP_User_Query( array( 'meta_key' => 'broker_email', 'meta_value' => $bmail,  'fields' => 'all'  ) );
    $users = $user_query->get_results();
    if (!empty($users)) {
        $results = '<ul>';
        foreach ($users as $user){
            $results = '<li>' . $user->display_name . '</li>';
        }
        $results =  '</ul>';
    } else {
        $results =  'No users found';
    }
    wp_reset_postdata();
    return $results;
}
// Adds the above function as as shortcode
add_shortcode( 'your_agents', 'thebroker_agents' );

Il vous manquait un dernier support. De plus, j'ai un peu modifié le code en renvoyant vos résultats. J'ai également réinitialisé vos données de poste. Vous ne savez pas pourquoi vous n’avez pas utilisé d’instruction while dans votre code, mais vous l’avez laissé seul.

Puisque vous appelez votre fonction en php, vous n'avez pas besoin d'un code court. vous pouvez l'appeler comme ça:

echo thebroker_agents();

Cependant, votre shortcode echo do fonctionnera également.

1
rudtek