2017-10-10 8 views
1

Nous utilisons le code function.php ci-dessous pour offrir un champ à choix multiples dans la caisse. Nous l'ajoutons à la page de commande et l'incluons dans l'e-mail.Afficher un champ méta personnalisé dans la liste des commandes d'administration de Woocommerce et le rendre consultable

Comment pouvons-nous également l'inclure dans la page d'administration de la vue ORDERs, la rendre consultable et triable?

// add select box for platform used at checkout 
add_action('woocommerce_after_order_notes', 'wps_add_select_checkout_field'); 
function wps_add_select_checkout_field($checkout) { 
    echo '<h3>'.__('').'</h3>'; 
    woocommerce_form_field('platform', array(
     'type'   => 'select', 
     'class'   => array('wps-drop'), 
     'label'   => __('On which platform will you be using it?'), 
     'options'  => array(
      'blank'  => __('-- Choose an option --', 'wps'), 
      'app1' => __('app1', 'wps'), 
      'app2' => __('app2', 'wps'), 
      'app3' => __('app3', 'wps') 
     ) 
    ), $checkout->get_value('platform')); 
} 

// Process the checkout 
add_action('woocommerce_checkout_process', 'wps_select_checkout_field_process'); 
function wps_select_checkout_field_process() { 
    global $woocommerce; 

    // Check if set, if its not set add an error. 
    if ($_POST['platform'] == "blank") 
     wc_add_notice('<strong>Please select your primary trading platform that you will be using with our strategy</strong>', 'error'); 
} 


// Update the order meta with field value 
add_action('woocommerce_checkout_update_order_meta', 'wps_select_checkout_field_update_order_meta'); 
function wps_select_checkout_field_update_order_meta($order_id) { 
    if ($_POST['platform']) update_post_meta($order_id, 'platform', esc_attr($_POST['platform'])); 
} 

// Display field value on the order edition page 
add_action('woocommerce_admin_order_data_after_billing_address', 'wps_select_checkout_field_display_admin_order_meta', 10, 1); 
function wps_select_checkout_field_display_admin_order_meta($order){ 
    echo '<p><strong>'.__('Primary Platform').':</strong> ' . get_post_meta($order->id, 'platform', true) . '</p>'; 
} 

// Add selection field value to emails 
add_filter('woocommerce_email_order_meta_keys', 'wps_select_order_meta_keys'); 
function wps_select_order_meta_keys($keys) { 
    $keys['platform:'] = 'platform'; 
    return $keys; 
} 

Répondre

1

Voici le moyen d'ajouter une colonne personnalisée « plate-forme » dans la liste des commandes Administrateur WooCommerce et d'ajouter ce champ personnalisé clé meta dans la recherche:

// ADDING A CUSTOM COLUMN TITLE TO ADMIN ORDER LIST 
add_filter('manage_edit-shop_order_columns', 'custom_shop_order_column', 12, 1); 
function custom_shop_order_column($columns) 
{ 
    // Set "Actions" column after the new colum 
    $action_column = $columns['order_actions']; // Set the title in a variable 
    unset($columns['order_actions']); // remove "Actions" column 


    //add the new column "Platform" 
    $columns['order_platform'] = '<span>'.__('Platform','woocommerce').'</span>'; // title 

    // Set back "Actions" column 
    $columns['order_actions'] = $action_column; 

    return $columns; 
} 

// ADDING THE DATA FOR EACH ORDERS BY "Platform" COLUMN 
add_action('manage_shop_order_posts_custom_column' , 'custom_order_list_column_content', 10, 2); 
function custom_order_list_column_content($column, $post_id) 
{ 

    // HERE get the data from your custom field (set the correct meta key below) 
    $platform = get_post_meta($post_id, 'platform', true); 
    if(empty($platform)) $platform = ''; 

    switch ($column) 
    { 
     case 'order_platform' : 
      echo '<span>'.$platform.'</span>'; // display the data 
      break; 
    } 
} 

// MAKE 'PLATFORM' METAKEY SEARCHABLE IN THE SHOP ORDERS LIST 
add_filter('woocommerce_shop_order_search_fields', 'platform_search_fields', 10, 1); 
function platform_search_fields($meta_keys){ 
    $meta_keys[] = 'platform'; 
    return $meta_keys; 
} 

Code va dans function.php fichier de votre thème enfant actif (thème actif ou dans un fichier plugin).

Testé et fonctionne.