【发布时间】:2020-02-06 12:22:47
【问题描述】:
我将 Wordpress 与 WooCommerce 一起使用。某些订单不仅应该在后端可见,还应该在前端可见。
现在我创建了一个 SQL 查询(在 phpMyAdmin 中工作)。结果应显示在网站上的表格中。
SELECT
p.ID as order_id,
p.post_date,
max( CASE WHEN pm.meta_key = 'donateAnonym' AND p.ID = pm.post_id THEN pm.meta_value END ) as donateAnonym,
max( CASE WHEN pm.meta_key = '_billing_email' AND p.ID = pm.post_id THEN pm.meta_value END ) as billing_email,
max( CASE WHEN pm.meta_key = '_billing_first_name' AND p.ID = pm.post_id THEN pm.meta_value END ) as _billing_first_name,
max( CASE WHEN pm.meta_key = '_billing_last_name' AND p.ID = pm.post_id THEN pm.meta_value END ) as _billing_last_name,
max( CASE WHEN pm.meta_key = '_billing_city' AND p.ID = pm.post_id THEN pm.meta_value END ) as _billing_city,
max( CASE WHEN pm.meta_key = '_billing_state' AND p.ID = pm.post_id THEN pm.meta_value END ) as _billing_state,
max( CASE WHEN pm.meta_key = '_order_total' AND p.ID = pm.post_id THEN pm.meta_value END ) as order_total,
( SELECT GROUP_CONCAT( order_item_name separator '|' ) FROM wp_woocommerce_order_items WHERE order_id = p.ID ) as order_items
FROM
wp_posts p
JOIN wp_postmeta pm on p.ID = pm.post_id
JOIN wp_woocommerce_order_items oi on p.ID = oi.order_id
GROUP BY
p.ID
我将此代码添加到我的主题的functions.php 文件中。现在可以通过将[showAllHrOrdersTable] 添加到任何页面或帖子来显示来自该功能的信息。
add_shortcode( 'showAllHrOrdersTable', 'showAllHrOrders' );
function showAllHrOrders( $args ) {
$SQLstring = 'SELECT
p.ID as order_id,
p.post_date,
max( CASE WHEN pm.meta_key = 'donateAnonym' AND p.ID = pm.post_id THEN pm.meta_value END ) as donateAnonym,
max( CASE WHEN pm.meta_key = '_billing_email' AND p.ID = pm.post_id THEN pm.meta_value END ) as billing_email,
max( CASE WHEN pm.meta_key = '_billing_first_name' AND p.ID = pm.post_id THEN pm.meta_value END ) as _billing_first_name,
max( CASE WHEN pm.meta_key = '_billing_last_name' AND p.ID = pm.post_id THEN pm.meta_value END ) as _billing_last_name,
max( CASE WHEN pm.meta_key = '_billing_city' AND p.ID = pm.post_id THEN pm.meta_value END ) as _billing_city,
max( CASE WHEN pm.meta_key = '_billing_state' AND p.ID = pm.post_id THEN pm.meta_value END ) as _billing_state,
max( CASE WHEN pm.meta_key = '_order_total' AND p.ID = pm.post_id THEN pm.meta_value END ) as order_total,
( SELECT GROUP_CONCAT( order_item_name separator '|' ) FROM wp_woocommerce_order_items WHERE order_id = p.ID ) as order_items
FROM
wp_posts p
JOIN wp_postmeta pm on p.ID = pm.post_id
JOIN wp_woocommerce_order_items oi on p.ID = oi.order_id
GROUP BY
p.ID';
global $wpdb;
$content = '<table>';
$content .= '</tr><th>Family</th>';
$content .= '<th>Name</th>';
$content .= '<th>City</th></tr>';
$results = $wpdb->get_results( $SQLstring );
foreach ( $results AS $row ) {
$content .= '<tr><td>' . $row->_billing_first_name . '</td>';
$content .= '<td>' . $row->_billing_last_name . '</td>';
$content .= '<td>' . $row->_billing_city . '</td></tr>';
}
$content .= '</table>';
return $content;
}
问题:当我使用快捷方式上传并启动页面时,出现以下错误:
Parse error: syntax error, unexpected 'donateAnonym' (T_STRING) in .../themes/.../functions.php
注意事项: 当我将 SQLString 更改为 SELECT * FROM ... 时,错误消失了,但一些重要的列(例如 donateAnonym)会丢失。
add_shortcode( 'showAllHrOrdersTable', 'showAllHrOrders' );
function showAllHrOrders( $args ) {
$SQLstring = 'SELECT *
FROM
wp_posts p
JOIN wp_postmeta pm on p.ID = pm.post_id
JOIN wp_woocommerce_order_items oi on p.ID = oi.order_id
GROUP BY
p.ID';
global $wpdb;
$content = '<table>';
$content .= '</tr><th>Family</th>';
$content .= '<th>Name</th>';
$content .= '<th>City</th></tr>';
$results = $wpdb->get_results( $SQLstring );
foreach ( $results AS $row ) {
$content .= '<tr><td>' . $row->_billing_first_name . '</td>';
$content .= '<td>' . $row->_billing_last_name . '</td>';
$content .= '<td>' . $row->_billing_city . '</td></tr>';
}
$content .= '</table>';
return $content;
}
如何实现我的 sql 查询而不出现任何错误?
【问题讨论】: