特定のロール内で特定のメタキー値に一致するユーザーをリストするために使用する機能があります。私が直接それをページ上で使うときそれは働きます---
<?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]」というテキストをエコーアウトする以外は何もしません。
ショートコード機能で何が問題になっていますか?
これを試して:
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はまだ同様に動作します。