非常奇怪的WordPress foreach行为

时间:2014-03-16 21:12:56

标签: php mysql wordpress

我在WordPress页面中运行了一些php,它运行MySQL查询以从自定义post meta获取事务详细信息。它很复杂,所以我将从一些背景开始:

自定义帖子类型"交易"是收钱。感兴趣的元素是日期和金额。 自定义帖子类型"付款"是为了汇款。同样,感兴趣的元素是日期和金额(总是负数,只是为了使计算更容易)。

每笔交易/付款都是已发布的帖子。我正在运行的SQL获取用户资产负债表的所有相关信息的列表:

(SELECT a.post_type, a.ID, a.post_title, b.meta_value as date, c.meta_value as amount
  FROM $wpdb->posts a, $wpdb->postmeta b, $wpdb->postmeta c
  WHERE a.ID = b.post_ID
  AND a.ID = c.post_ID
  AND a.post_author = $user_id
  AND a.post_status = 'publish'
  AND a.post_type = 'transaction'
  AND b.meta_key = '_txn_date'
  AND c.meta_key = '_txn_amount')
UNION
(SELECT a.post_type, a.ID, a.post_title, b.meta_value as date, c.meta_value as amount
  FROM $wpdb->posts a, $wpdb->postmeta b, $wpdb->postmeta c
  WHERE a.ID = b.post_ID
  AND a.ID = c.post_ID
  AND a.post_author = $user_id
  AND a.post_status = 'publish'
  AND a.post_type = 'payment'
  AND b.meta_key = '_payment_date'
  AND c.meta_key = '_payment_amount')
ORDER BY date DESC

然后我拿出那些结果并计算余额:

$items = $wpdb->get_results($transact);
$total_balance = 0;
foreach ($items as $item) {
  $item_amount = $item->amount;
  $total_balance += $item_amount;
}

然后我想循环遍历所有结果并在表格的一行中显示每一个结果。

foreach ($items as $item) {
  $id = $item->ID;
  $item_date = date('d M Y', strtotime($item->date));
  $item_type = $item->post_type;
  $item_amount = number_format($item->amount,2);
  $item_name = $item->post_title;
  if ($item_type = 'transaction') {
    $item_site_id = get_post_meta($id, '_txn_site_id', true);
    $item_name = get_the_title($item_site_id);
  }
  echo '<tr><td>' . $item_date . '</td>
        <td>' . $item_name . '</td>
        <td align="right">' . $item_amount . '</td></tr>';
  }
echo '</table>';
}

奇怪的是输出:我查看了结果,查询很好。额外的&#34;如果&#34;事务循环(关闭并从另一个自定义帖子类型获取站点名称)工作正常。但付款的$ item_name会显示当前页面名称,而不是付款的帖子标题。

例如,在原始结果中,post_title表示&#34; Payout:2014年2月2日&#34;,但它显示为&#34; My Balance&#34;在输出表中。

我怀疑这是因为某些奇怪的php循环内容。谁能明白为什么?

0 个答案:

没有答案