Ambassador Dashboard

/** * Ambassador Dashboard UI * Shortcode: [bbb_ambassador_dashboard] * Requires: bbb_get_ambassador_stats (wp_ajax) and bbb_find_user_by_ref etc. */// Enqueue dashboard assets function bbb_enqueue_dashboard_assets() { if ( ! is_page() && ! is_singular() ) { // still enqueue if shortcode used anywhere; safe guard later } wp_register_style( ‘bbb-dashboard-css’, false ); wp_enqueue_style( ‘bbb-dashboard-css’ ); wp_add_inline_style( ‘bbb-dashboard-css’, ” .bbb-dashboard{max-width:1100px;margin:18px auto;padding:18px;font-family:Inter,Arial,Helvetica,sans-serif;color:#071018} .bbb-panel{background:#fff;border-radius:12px;padding:18px;margin-bottom:14px;color:#071018} .bbb-grid{display:grid;grid-template-columns:1fr 320px;gap:16px} .bbb-stats{display:flex;gap:12px;flex-wrap:wrap} .bbb-stat{flex:1;min-width:140px;background:#f6f7fb;padding:12px;border-radius:10px;text-align:center} .bbb-qr{display:flex;flex-direction:column;align-items:center;gap:8px} .bbb-ref-input{width:100%;padding:8px;border-radius:8px;border:1px solid #e3e7ef} .bbb-share{display:flex;gap:8px;flex-wrap:wrap} @media(max-width:880px){.bbb-grid{grid-template-columns:1fr}} ” );wp_register_script( ‘bbb-dashboard-js’, false ); wp_enqueue_script( ‘bbb-dashboard-js’ ); $ajax = admin_url( ‘admin-ajax.php’ ); $nonce = wp_create_nonce( ‘bbb_dashboard_nonce’ ); wp_add_inline_script( ‘bbb-dashboard-js’, ” const BBB_AJAX_URL = ‘” . esc_js( $ajax ) . “‘; const BBB_DASHBOARD_NONCE = ‘” . esc_js( $nonce ) . “‘; ” ); wp_add_inline_script( ‘bbb-dashboard-js’, ” (function(){ function el(sel){return document.querySelector(sel);} function els(sel){return document.querySelectorAll(sel);}function fetchStats(){ var data = new FormData(); data.append(‘action’,’bbb_get_ambassador_stats’); data.append(‘_wpnonce’, BBB_DASHBOARD_NONCE); fetch(BBB_AJAX_URL, { method:’POST’, body: data, credentials:’same-origin’ }) .then(res=>res.json()).then(json=>{ if(json.success){ const s = json.data; el(‘.bbb-stat-clicks’).innerText = s.clicks || 0; el(‘.bbb-stat-orders’).innerText = s.orders || 0; el(‘.bbb-stat-earnings’).innerText = (s.earnings ? ‘RM’ + parseFloat(s.earnings).toFixed(2) : ‘RM0.00’); el(‘.bbb-stat-signups’).innerText = s.signups || 0; } else { // not logged or no ref yet console.log(‘Stats error’, json); } }).catch(err=>console.log(‘AJAX error’,err)); }// update phone document.addEventListener(‘submit’, function(e){ if(e.target && e.target.id === ‘bbb-update-phone-form’){ e.preventDefault(); var fd = new FormData(e.target); fd.append(‘action’,’bbb_update_amb_phone’); fd.append(‘_wpnonce’, BBB_DASHBOARD_NONCE); fetch(BBB_AJAX_URL, {method:’POST’, body:fd, credentials:’same-origin’}) .then(r=>r.json()).then(j=>{ if(j.success){ alert(‘Phone updated’); } else { alert(‘Update failed’); } }).catch(()=>alert(‘Network error’)); } });// initial fetch document.addEventListener(‘DOMContentLoaded’, function(){ fetchStats(); }); })(); ” ); } add_action( ‘wp_enqueue_scripts’, ‘bbb_enqueue_dashboard_assets’ );// AJAX handler to update ambassador phone (logged-in only) function bbb_ajax_update_amb_phone() { check_admin_referer(‘bbb_dashboard_nonce’); if ( ! is_user_logged_in() ) wp_send_json_error(‘not_logged_in’); $user = wp_get_current_user(); if ( ! in_array( ‘bbb_ambassador’, (array)$user->roles ) ) wp_send_json_error(‘not_ambassador’); $phone = sanitize_text_field( $_POST[‘phone’] ?? ” ); if ( empty( $phone ) ) wp_send_json_error(’empty_phone’); update_user_meta( $user->ID, ‘bbb_phone’, $phone ); wp_send_json_success( [‘ok’=>1] ); } add_action( ‘wp_ajax_bbb_update_amb_phone’, ‘bbb_ajax_update_amb_phone’ );// Shortcode rendering function bbb_ambassador_dashboard_shortcode( $atts ) { ob_start(); if ( ! is_user_logged_in() ) { echo ‘

Ambassador Portal

Please log in or register to access your dashboard.

‘; return ob_get_clean(); }$user = wp_get_current_user(); if ( ! in_array( ‘bbb_ambassador’, (array)$user->roles ) ) { echo ‘

Ambassador Portal

Your account is not registered as an Ambassador. Apply here.

‘; return ob_get_clean(); }// ensure ref id exists (generated earlier by plugin) $ref_id = get_user_meta( $user->ID, ‘bbb_ref_id’, true ); if ( empty( $ref_id ) ) { $ref_id = ‘BBB’.dechex( $user->ID ).substr( md5( $user->user_email . time() ), 0, 6 ); update_user_meta( $user->ID, ‘bbb_ref_id’, $ref_id ); }$ref_link = add_query_arg( ‘ref’, $ref_id, home_url( ‘/’ ) ); $qr_src = ‘https://chart.googleapis.com/chart?chs=300×300&cht=qr&chl=’ . rawurlencode( $ref_link ) . ‘&chld=L|1’;// earnings quick read $earnings = floatval( get_user_meta( $user->ID, ‘bbb_total_earnings’, true ) ?? 0 );?>

Welcome, display_name ); ?>

Share your referral link — every signup & sale tracked to your link earns you commission.

Clicks
0
Signups
0
Orders
0
Earnings
RM
Translate »
滚动至顶部