Я использовал 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
Я добавил этот код в функции моей темы. 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 запрос ie без каких-либо ошибок?