2012-12-03 20 views

Odpowiedz

0

Natknąłem się teraz na Woocommerce. Dodano niestandardowe pole Osobisty numer rejestracyjny - a teraz chciałem, aby był wyświetlany na stronie Przegląd zamówienia.

Udało mi się dodać kolumnę - ale nadal nie udało się uzyskać wartości niestandardowego pola dla każdego zamówienia.

Oto co zrobiłem:

// Removed Existing Order Page collumns 
remove_filter('manage_edit-shop_order_columns', 'woocommerce_edit_order_columns'); 

// Added My own filter to Show the PRN - Personal Registration field 
add_filter('manage_edit-shop_order_columns', 'omak_edit_order_columns'); 

// The omak_edit_order_columns definition 
/*** Taken from admin/post_types/shop_order.php ***/ 
function omak_edit_order_columns($columns){ 
global $woocommerce; 

$columns = array(); 

$columns["cb"]   = "<input type=\"checkbox\" />"; 
$columns["order_status"] = __('Status', 'woocommerce');  
$columns["order_title"]  = __('Order', 'woocommerce'); 
$columns["order_prn"]  = __('PRN', 'woocommerce'); // This is the line which added the column after the Title Column 
$columns["billing_address"]  = __('Billing', 'woocommerce'); 
$columns["shipping_address"] = __('Shipping', 'woocommerce'); 
$columns["total_cost"]  = __('Order Total', 'woocommerce'); 
$columns["order_comments"] = '<img alt="' . esc_attr__('Order Notes', 'woocommerce') . '" src="' . $woocommerce->plugin_url() . '/assets/images/order-notes_head.png" class="tips" data-tip="' . __('Order Notes', 'woocommerce') . '" width="12" height="12" />'; 

$columns["note"]    = '<img src="' . $woocommerce->plugin_url() . '/assets/images/note_head.png" alt="' . __('Customer Notes', 'woocommerce') . '" class="tips" data-tip="' . __('Customer Notes', 'woocommerce') . '" width="12" height="12" />'; 

$columns["order_date"]    = __('Date', 'woocommerce'); 
$columns["order_actions"]  = __('Actions', 'woocommerce'); 

return $columns; 
} 

Daj mi znać, jeśli to pomaga ...

ja zostaję do czynienia z jak dostać się do jego wartości dla każdego zamówienia.

Zgodnie z komentarzem: definicja funkcji istnieje w shop_order.php w wtyczce WooCommerce. Daj mi znać, jeśli ktokolwiek to rozwiąże ... lub wie, jak to zrobić.

Dzięki (przepraszam, był zajęty czymś tak nie mógł odczytać z powrotem do sprawdzania błędów)

36

W przypadku ktoś jeszcze potrzebuje - instrukcje jak dodać nowe kolumny w woocommerce listy zamówień. Nie ma potrzeby wyłączania domyślnych kolumn, po prostu dodaj to w swoim functions.php, a kod będzie ważny dla aktualizacji.

1. Określ położenie kolumn i nazwy

add_filter('manage_edit-shop_order_columns', 'MY_COLUMNS_FUNCTION'); 
function MY_COLUMNS_FUNCTION($columns){ 
    $new_columns = (is_array($columns)) ? $columns : array(); 
    unset($new_columns['order_actions']); 

    //edit this for you column(s) 
    //all of your columns will be added before the actions column 
    $new_columns['MY_COLUMN_ID_1'] = 'MY_COLUMN_1_TITLE'; 
    $new_columns['MY_COLUMN_ID_2'] = 'MY_COLUMN_2_TITLE'; 
    //stop editing 

    $new_columns['order_actions'] = $columns['order_actions']; 
    return $new_columns; 
} 

2. Dla każdej kolumny niestandardowego, pokazują wartości

add_action('manage_shop_order_posts_custom_column', 'MY_COLUMNS_VALUES_FUNCTION', 2); 
function MY_COLUMNS_VALUES_FUNCTION($column){ 
    global $post; 
    $data = get_post_meta($post->ID); 

    //start editing, I was saving my fields for the orders as custom post meta 
    //if you did the same, follow this code 
    if ($column == 'MY_COLUMN_ID_1') {  
     echo (isset($data['MY_COLUMN_1_POST_META_ID']) ? $data['MY_COLUMN_1_POST_META_ID'] : ''); 
    } 
    if ($column == 'MY_COLUMN_ID_2') {  
     echo (isset($data['MY_COLUMN_2_POST_META_ID']) ? $data['MY_COLUMN_2_POST_META_ID'] : ''); 
    } 
    //stop editing 
} 

3. (nieobowiązkowo) funkcje do kolumn sortowane przez

add_filter("manage_edit-shop_order_sortable_columns", 'MY_COLUMNS_SORT_FUNCTION'); 
function MY_COLUMNS_SORT_FUNCTION($columns) { 
    $custom = array(
     //start editing 

     'MY_COLUMN_ID_1' => 'MY_COLUMN_1_POST_META_ID', 
     'MY_COLUMN_ID_2' => 'MY_COLUMN_2_POST_META_ID' 

     //stop editing 
    ); 
    return wp_parse_args($custom, $columns); 
} 
+1

Bardzo dobrze wyjaśniona odpowiedź. Brakujący średnik na pierwszym przykładzie –

+0

Czy wiesz, czy to nadal działa w WooCommerce 2.1.3? Próbowałem, ale to nie działa; nie dodano niestandardowych kolumn. Wygląda * tak, jakby filtr był stosowany; jeśli umieściłem 'die()' w funkcji nie utworzono kolumn, poza tym nie mogę uzyskać żadnej zmiany. – Dre

+4

@Dre Pierwszy filtr wymaga nieco wyższego priorytetu niż domyślny 10. Kiedy uruchomiłem go z wtyczki, 11 działało: 'add_filter ('manage_edit-shop_order_columns', 'MY_COLUMNS_FUNCTION', 11);' – orionrush

0

Następujące prace dla WooCommerce 2.6.2. Należy spojrzeć na dwa nowe haki:

1. Definiowanie kolumn nagłówki

add_filter('woocommerce_admin_order_item_headers', 'so13683162_headers'); 
function so13683162_headers($order) { 
    echo "<th>FIELD1</th>"; 
} 

2. Wypełnij wartości w wierszach

add_filter('woocommerce_admin_order_item_values', 'so13683162_values'); 
function so13683162_values($product) { 
    if (isset($product -> id)) { 
     $attrs = get_post_meta($product -> id, "_product_attributes", true); 
     echo "<td>" . $attrs["FIELD1"]["value"] . "</td>"; 
    } 
} 
+0

To nie dodaje kolumny do listy, tylko dodaje kolumnę do widoku szczegółów. – kevinc

0

Aby dodać nowy kupon kolumnowy do tabeli zamówień woo-commerce i uzyskać cały kod kuponu zgodnie z zamówieniem. musisz skopiować i wkleić w sobie function.php.

add_filter('manage_edit-shop_order_columns', 'custom_shop_order_column', 11); 

function custom_shop_order_column($columns) { 
    //add columns 
    $columns['my-column1'] = __('Coupons Code', 'theme_slug'); 
    return $columns; 
} 

// adding the data for each orders by column (example) 
add_action('manage_shop_order_posts_custom_column', 'cbsp_credit_details', 10, 2); 

function cbsp_credit_details($column) { 
    global $post, $woocommerce, $the_order; 
    $order_id = $the_order->id; 

    switch ($column) { 
     case 'my-column1' : 
      // $myVarOne = wc_get_order_item_meta($order_id, 15, true); 
      if ($the_order->get_used_coupons()) { 

       $coupons_count = count($the_order->get_used_coupons()); 
       foreach ($the_order->get_used_coupons() as $coupon) { 
        echo $coupon; 

        $i++; 
       } 

       echo '</p>'; 
      } 
      // echo $myVarOne; 
      break; 
    } 
} 
0

Spróbuj tego, dostaniesz rozwiązanie wystarczy napisać poniżej kod na swojej function.php pliku.

add_filter('manage_edit-shop_order_columns','your_function_name',10); 
function your_function_name($columns){ 
     $columns['delivery_date'] = __('Delivery date','textdomain'); 
     return $columns; 
    } 
add_action('manage_shop_order_posts_custom_column','your_other_function_name',20); 
function your_other_function_name($column) 
{ 
    swith($column) 
    { 
     case 'delivery_date': // your custom code here and do what you want. 
    } 
} 
Powiązane problemy