web-dev-qa-db-ja.com

特定のメタキー値を持つユーザーをリストするためのショートコードを作成する

特定のロール内で特定のメタキー値に一致するユーザーをリストするために使用する機能があります。私が直接それをページ上で使うときそれは働きます---

<?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';
  };
?>

しかし、私がショートコードとして作成しようとすると -

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

そして同じページを呼び出すように -

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

「[your_agents]」というテキストをエコーアウトする以外は何もしません。

ショートコード機能で何が問題になっていますか?

1
Rich

これを試して:

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

最後の括弧がありません。また、コードをエコーから、結果を返すように変更しました。あなたの投稿データもリセットします。なぜコードでwhile文を使用しなかったのかわからないが、そのままにしておいた。

あなたはphpであなたの関数を呼んでいるので、あなたは短いコードを必要としません。このように呼ぶことができます。

echo thebroker_agents();

しかしあなたのエコーdo shortcodeはまだ同様に動作します。

1
rudtek