Установите и используйте данные сеанса из пользовательской таблицы, перенаправляя в корзину - PullRequest
0 голосов
/ 14 сентября 2018

Я пишу пользовательский плагин woocomerce. У меня есть список элементов на странице, каждый из которых имеет собственную кнопку добавления, когда я нажимаю это в массиве сессий, я сохраняю это и хочу показать, что это на странице корзины в одной строке таблицы, как плагин woocommerce.мой код ниже, я не знаю, как перенаправить на другую страницу после нажатия кнопки добавления.// страница списка товаров: когда кто-то нажимает на кнопку добавления, я хочу перенаправить на страницу корзины.

<?php
function register_session(){
    if(!session_id()) session_start();
}
add_action('init','register_session');
?>
 <table border="1">
   <tr>
     <th>Item_ID</th>   
     <th>Item Description</th>  
     <th>Packing Size</th>  
     <th>Cart</th>
   </tr>
 <?php
 $result1 = $wpdb->get_results ( "SELECT * FROM wp_orderlist where 
 category_id = $cat ");
 foreach ( $result1 as $print1 ) {
    echo '<tr>';
    echo '<td>'. $print1->item_id.'</td>';
    echo '<td>'. $print1->Item_Description.'</td>';
    echo '<td>'. $print1->Packing.'</td>';
    echo '<td> <form method="post"> <input type="submit" name="add" 
    href="$print1->item_id" value="ADD"></form> </td>';
    echo '</tr>';
 }
 echo '</tr> ';
 ?>            

 </table>
 </div>
 <?php } 

 if (isset($_POST['add']))
   {
     $cart = array (
     'oid' => $print1->item_id,
     'des' => $print1->Item_Description,
     'pack' =>  $print1->Packing
     );
     $_SESSION['cart'][] = $cart;

     print_r($_SESSION['cart']);
   }
   ?>
 //I place this code on cart page to show data in array just for testing 
 //I am getting empty array.

 <?php
 $cart = ! empty( $_SESSION['cart'] ) ? $_SESSION['cart'] : false;

 $_SESSION['cart'][] = $cart;

 print_r($_SESSION['cart']);
 exit;
 ?>
 // I want automatic redirection to cart and want to show session 
 //     data in one row table.  

1 Ответ

0 голосов
/ 14 сентября 2018

Ваш код на самом деле не тестируется, так как 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();
        }
    }
}

Протестировано и работает с некоторыми имитационными данными таблицы базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...