WooCommerce - WordPress

Exporter les mails par groupe B2BKing

Publié par Victor G.

Le site d’un de nos clients utilise B2BKing, une très bonne extension pour la gestion d’un canal B2B et B2C avec WooCommerce.

Notre client souhaite faire une campagne de mailing adaptée à chacun des groupes B2B et également au groupe B2C. Le site a 3 groupes B2B. Pour résumer, les groupes sont: « Petits vendeurs », « Moyen vendeurs » et « Gros vendeurs ». Il fallait donc récupérer les mails séparément.  

Le code

Le code est en 2 parties.

  • Une partie qui ajoute un bouton sur les pages d’éditions des groupes. (Dans B2BKing > Groupes > « nom de votre groupe »)
  • Une autre partie qui fait la requête à la base de données et génère le CSV.

Je vous recommande de le mettre dans un plugin comme Code Snippets et de l’activer que quand c’est nécéssaire (car le bouton s’affichera partout)

				
					function add_export_button_if_b2bking_edit_page() {
    global $pagenow;
    if ($pagenow === 'post.php' && isset($_GET['post']) && isset($_GET['action']) && $_GET['action'] === 'edit') {
        $post_id = intval($_GET['post']);
        
        // Ajout du bouton d'exportation
        echo '<script type="text/javascript">
            document.addEventListener("DOMContentLoaded", function() {
                var exportButton = document.createElement("a");
                exportButton.href = "' . admin_url('admin-post.php?action=export_users_by_b2bking_group&group_id=' . $post_id) . '";
                exportButton.className = "button button-primary";
                exportButton.innerText = "Exporter les utilisateurs par groupe";
                var postStuff = document.getElementById("poststuff");
                if (postStuff) {
                    postStuff.prepend(exportButton);
                }
            });
        </script>';
    }
	if ($pagenow === 'admin.php' && isset($_GET['page']) && $_GET['page'] === 'b2bking_b2c_users') {
        // Ajout du bouton d'exportation pour les utilisateurs B2C
        echo '<script type="text/javascript">
            document.addEventListener("DOMContentLoaded", function() {
                var exportButton = document.createElement("a");
                exportButton.href = "' . admin_url('admin-post.php?action=export_users_by_b2bking_group&group_id=b2c') . '";
                exportButton.className = "button button-primary";
                exportButton.innerText = "Exporter les utilisateurs B2C";
                var wrap = document.querySelector(".b2bking_above_top_title_button_left");
                if (wrap) {
                    wrap.appendChild(exportButton);
                }
            });
        </script>';
    }
}

add_action('admin_footer', 'add_export_button_if_b2bking_edit_page');


function export_users_by_b2bking_group() {
    if (isset($_GET['group_id'])) {
        $group_id = $_GET['group_id'];

        if ($group_id === 'b2c') {
            // Exporter les utilisateurs B2C
            $args = array(
                'meta_key' => 'b2bking_customergroup',
                'meta_value' => 'no',
                'number' => -1  // Récupérer tous les utilisateurs
            );
        } else {
            // Exporter les utilisateurs d'un groupe spécifique B2BKing
            $args = array(
                'meta_key' => 'b2bking_customergroup',
                'meta_value' => intval($group_id),
                'number' => -1  // Récupérer tous les utilisateurs
            );
        }

        $user_query = new WP_User_Query($args);
        $users = $user_query->get_results();

        if (!empty($users)) {
            header('Content-Type: text/csv');
            header('Content-Disposition: attachment; filename="users_by_group_' . $group_id . '.csv"');

            $output = fopen('php://output', 'w');
            fputcsv($output, array('User ID', 'Username', 'Email', 'Group'));

            foreach ($users as $user) {
                $group = $group_id === 'b2c' ? 'B2C' : get_user_meta($user->ID, 'b2bking_customergroup', true);
                fputcsv($output, array(
                    $user->ID,
                    $user->user_login,
                    $user->user_email,
                    $group
                ));
            }

            fclose($output);
            exit();
        } else {
            wp_die('No users found for this group.');
        }
    } else {
        wp_die('Invalid group ID.');
    }
}
add_action('admin_post_export_users_by_b2bking_group', 'export_users_by_b2bking_group');