我在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循环内容。谁能明白为什么?