Цикл Foreach выполняет только первое значение с возвратом, но возвращает все значения с эхо

Я пытаюсь создать партнерскую таблицу лидеров, используя affiliatewp. Однако я могу получить любое значение, которое мне нужно, в функции, которую я использую в цикле foreach, который вызывает каждого партнера и отображает «продажи» за месяц.

function affiliate_leaderboard_function() {
global $wpdb;

$getallreferrals = $wpdb->get_results( "SELECT * FROM `wp_affiliate_wp_referrals`");
$getallaffiliates = $wpdb->get_results( "SELECT * FROM `wp_affiliate_wp_affiliates`");
$current_month = get_the_date("m");
$current_year = get_the_date("Y");
$current_date = get_the_date("Y-m-d");
$lastday = date('t',strtotime($current_date));

foreach ($getallaffiliates as $theaffiliate) {
$user_id = get_userdata( $theaffiliate->user_id );
$userfirstname = $user_id->first_name;
$userlastname = $user_id->last_name;
$totalreferrals = $theaffiliate->referrals;
$affiliate_id = $theaffiliate->affiliate_id;
$getaffreferrals = $wpdb->get_results( "SELECT `date` FROM `wp_affiliate_wp_referrals` WHERE `affiliate_id` = $affiliate_id AND `date` >= '$current_year-$current_month-01:00:00:00' AND `date` < '$current_year-$current_month-$lastday:23:59:59' ORDER BY `wp_affiliate_wp_referrals`.`referral_id` ASC");//Get all referrals by affiliate id
$closerstring = $userfirstname." | This Month's Sales: ".count($getaffreferrals)."<br>";
if(!empty($getaffreferrals)){
echo $closerstring;
}
}
}
add_shortcode('affiliate_leaderboard' , 'affiliate_leaderboard_function');

Поэтому, когда я ставлю шорткод на место, и с помощью «echo $ ближеstring» он выплевывает все правильные данные, имя пользователя и количество продаж в текущем месяце. НО вывод шорткода вверху контента.

Когда я переключаю его на «return $ closestring», он возвращает только один филиал вместо всех филиалов в цикле foreach. Я понятия не имею, как заставить его отображать все значения, как у функции echo, но мне нужно, чтобы он отображался в правильном месте …

0

Решение

В forloop, если вы пишете return, то цикл завершается при первом запуске самостоятельно. вместо этого, используя переменную
измени свой код на

$return = '';
foreach ($getallaffiliates as $theaffiliate) {
$user_id = get_userdata( $theaffiliate->user_id );
$userfirstname = $user_id->first_name;
$userlastname = $user_id->last_name;
$totalreferrals = $theaffiliate->referrals;
$affiliate_id = $theaffiliate->affiliate_id;
$getaffreferrals = $wpdb->get_results( "SELECT `date` FROM `wp_affiliate_wp_referrals` WHERE `affiliate_id` = $affiliate_id AND `date` >= '$current_year-$current_month-01:00:00:00' AND `date` < '$current_year-$current_month-$lastday:23:59:59' ORDER BY `wp_affiliate_wp_referrals`.`referral_id` ASC");//Get all referrals by affiliate id
$closerstring = $userfirstname." | This Month's Sales: ".count($getaffreferrals)."<br>";
if(!empty($getaffreferrals)){
$return_array.= $closerstring;
}
}

return $return_array;
0

Другие решения

Возврат прерывает выполнение функции.

Вам нужно сохранить вывод в строку и вернуть его в конце, например так:

[...]
$output= '';
foreach ($getallaffiliates as $theaffiliate) {
[...]
if(!empty($getaffreferrals)){
$output .= $closerstring;
}
}
return $output;
}
0

Создайте свою строку после каждого цикла вместо echo затем return это в конце:

$result = ""; // Create an empty string

foreach ($getallaffiliates as $theaffiliate) {
$user_id = get_userdata( $theaffiliate->user_id );
$userfirstname = $user_id->first_name;
$userlastname = $user_id->last_name;
$totalreferrals = $theaffiliate->referrals;
$affiliate_id = $theaffiliate->affiliate_id;
$getaffreferrals = $wpdb->get_results( "SELECT `date` FROM `wp_affiliate_wp_referrals` WHERE `affiliate_id` = $affiliate_id AND `date` >= '$current_year-$current_month-01:00:00:00' AND `date` < '$current_year-$current_month-$lastday:23:59:59' ORDER BY `wp_affiliate_wp_referrals`.`referral_id` ASC");//Get all referrals by affiliate id
$closerstring = $userfirstname." | This Month's Sales: ".count($getaffreferrals)."<br>";
if(!empty($getaffreferrals)){
$result .= $closerstring; // Add the data
}
}

return $result; // you return the full string
0

Добавить строку и вернуть.

    function affiliate_leaderboard_function() {
global $wpdb;

$getallreferrals = $wpdb->get_results( "SELECT * FROM `wp_affiliate_wp_referrals`");
$getallaffiliates = $wpdb->get_results( "SELECT * FROM `wp_affiliate_wp_affiliates`");
$current_month = get_the_date("m");
$current_year = get_the_date("Y");
$current_date = get_the_date("Y-m-d");
$lastday = date('t',strtotime($current_date));

$returnstring='';
foreach ($ge1tallaffiliates as $theaffiliate) {
$user_id = get_userdata( $theaffiliate->user_id );
$userfirstname = $user_id->first_name;
$userlastname = $user_id->last_name;
$totalreferrals = $theaffiliate->referrals;
$affiliate_id = $theaffiliate->affiliate_id;
$getaffreferrals = $wpdb->get_results( "SELECT `date` FROM `wp_affiliate_wp_referrals` WHERE `affiliate_id` = $affiliate_id AND `date` >= '$current_year-$current_month-01:00:00:00' AND `date` < '$current_year-$current_month-$lastday:23:59:59' ORDER BY `wp_affiliate_wp_referrals`.`referral_id` ASC");//Get all referrals by affiliate id
$closerstring = $userfirstname." | This Month's Sales: ".count($getaffreferrals)."<br>";
if(!empty($getaffreferrals)){
$returnstring .=$closerstring;
}
}
return $returnstring;
}
add_shortcode('affiliate_leaderboard' , 'affiliate_leaderboard_function');
0
По вопросам рекламы [email protected]