Ваш код на самом деле не тестируется, так как wp_orderlist
- это пользовательская таблица, а $cat
не определен в вашем коде. Итак, я попробовал с имитацией поддельных данных, и я установил некоторый код в две функции, которые будут:
- Получить необходимые данные из
wp_orderlist
пользовательской таблицы
- Установить данные выбранной опции в сеансах и перенаправить в корзину.
Отображение: Код вашей страницы будет:
<div> <?php // Missing opening div tag
?>
<table border="1">
<tr>
<th><?php _e("Item id","woocommerce"); ?></th>
<th><?php _e("Item Description","woocommerce"); ?></th>
<th><?php _e("Packing Size","woocommerce"); ?></th>
<th><?php _e("Action","woocommerce"); ?></th>
</tr>
<?php
foreach ( get_packing( $cat ) as $result ) : ?>
<tr>
<td><?php echo $result->item_id; ?></td>
<td><?php echo $result->Item_Description; ?></td>
<td><?php echo $result->Packing; ?></td>
<td> <a class="button alt" href="?cat=<?php echo $cat . '&packid=' . $result->item_id; ?>"><?php _e("Add","woocommerce"); ?></a></td>
</tr>
<?php endforeach; ?>
</table>
</div>
Функции: (код помещается в файл function.php вашей активной дочерней темы (или активной темы) :
// Utility function to get the data from "wp_orderlist" table
function get_packing( $cat, $id = '' ){
global $wpdb;
if( empty($id) ) {
// Get the results from the "category_id"
return $wpdb->get_results( "SELECT * FROM $wpdb->orderlist WHERE category_id = '$cat'");
} else {
// Get the row from the "category_id" and the "item_id"
return $wpdb->get_row( "SELECT * FROM $wpdb->orderlist WHERE category_id = '$cat' and item_id = '$id'");
}
}
// Set the chosen packing option data in session and redirect to cart page
add_action('template_redirect', 'grab_packing_option');
function grab_packing_option(){
if(session_id() == '' )
session_start();
if( isset( $_GET['cat'] ) && isset( $_GET['packid'] ) && ! isset($_SESSION['packing_option']) ){
$result = get_packing( $_GET['cat'], $_GET['packid'] );
// Set the chosen packing option data in session and redirect to cart page
if( $result->item_id == $_GET['packid'] && ! is_cart() ) {
$_SESSION['packing_option'] = $result; // Set data in session
wp_redirect( wc_get_cart_url() ); // Redirect to cart page
exit();
}
}
}
Протестировано и работает с некоторыми имитационными данными таблицы базы данных.