BuddyPress Member Export Import – WP-CLI Guide

Installation & Setup

Prerequisites

  • WP-CLI installed and configured
  • BuddyPress Member Export Import plugin activated
  • SSH access to your server
  • Appropriate user permissions

Verify Installation

# Check if WP-CLI is installed
wp --version

# Verify plugin is active
wp plugin list --status=active | grep bp-xprofile-export-import

# Check available commands
wp help bp-member

Available Commands

Command Overview

wp bp-member <command> [options]

Commands:
  list      List xProfile groups and fields
  stats     Show member statistics
  export    Export members to CSV
  import    Import members from CSV
  mapping   Generate field mapping template

Global Options

All commands support these global options:

--format=<format>     Output format (table, csv, json, yaml)
--quiet              Suppress non-error output
--debug              Show debug information
--color              Use colors in output

Export Commands

Basic Export

Export All Members

# Export all members with all fields
wp bp-member export

# Export to specific file
wp bp-member export --output=/path/to/export.csv

# Export with progress bar
wp bp-member export --progress

Export Specific Users

# Export specific user IDs
wp bp-member export --user-ids=1,2,3,4,5

# Export users by role
wp bp-member export --role=subscriber

# Export users by meta query
wp bp-member export --meta-key=active --meta-value=1

Field Selection

Export Specific xProfile Groups

# Export only specific profile groups
wp bp-member export --groups=1,2

# List available groups first
wp bp-member list --type=groups

# Export group by name
wp bp-member export --group-names="Base,Contact Info"

Export Specific Fields

# Export specific fields by ID
wp bp-member export --fields=1,2,3,4,5

# List available fields first
wp bp-member list --type=fields

# Export fields by name
wp bp-member export --field-names="Name,Bio,Location"

Export Options

Include Additional Data

# Include WordPress standard fields
wp bp-member export --standard-fields

# Include user meta data
wp bp-member export --user-meta

# Include specific meta fields
wp bp-member export --meta-fields="last_login,total_posts"

# Include avatar URLs
wp bp-member export --avatars

# Include group memberships
wp bp-member export --groups-membership

# Include all additional data
wp bp-member export --standard-fields --user-meta --avatars --groups-membership

Performance Options

# Set batch size for large exports
wp bp-member export --batch-size=500

# Limit number of users
wp bp-member export --limit=1000

# Add offset for pagination
wp bp-member export --limit=1000 --offset=5000

# Optimize for large datasets (50K+ users)
wp bp-member export --optimize

Complete Export Examples

Example 1: Full Export with All Data

wp bp-member export \
  --output=/var/www/exports/full-export.csv \
  --standard-fields \
  --user-meta \
  --avatars \
  --groups-membership \
  --progress

Example 2: Selective Export for Migration

wp bp-member export \
  --role=subscriber \
  --groups=1,2 \
  --fields=1,2,3,4,5 \
  --standard-fields \
  --output=/tmp/migration.csv \
  --batch-size=1000 \
  --progress

Example 3: Daily Backup Export

# Export with timestamp
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
wp bp-member export \
  --output=/backups/members_${TIMESTAMP}.csv \
  --optimize \
  --quiet

Import Commands

Basic Import

Simple Import

# Import from CSV file
wp bp-member import /path/to/import.csv

# Import with progress
wp bp-member import /path/to/import.csv --progress

# Dry run (preview without importing)
wp bp-member import /path/to/import.csv --dry-run

Field Mapping

Auto Mapping

# Use automatic field mapping
wp bp-member import /path/to/import.csv --auto-map

# Show mapping before import
wp bp-member import /path/to/import.csv --show-mapping

Manual Mapping

# Generate mapping template
wp bp-member mapping --csv=/path/to/import.csv > mapping.json

# Edit mapping.json, then import
wp bp-member import /path/to/import.csv --mapping=mapping.json

# Inline mapping
wp bp-member import /path/to/import.csv \
  --map="csv_column1:field_1,csv_column2:field_2"

Import Options

User Handling

# Update existing users
wp bp-member import /path/to/import.csv --update-existing

# Skip existing users
wp bp-member import /path/to/import.csv --skip-existing

# Only update, don't create new
wp bp-member import /path/to/import.csv --update-only

# Set default role for new users
wp bp-member import /path/to/import.csv --default-role=subscriber

Notifications

# Send welcome emails to new users
wp bp-member import /path/to/import.csv --send-notifications

# Custom notification template
wp bp-member import /path/to/import.csv \
  --send-notifications \
  --email-template=/path/to/template.html

Performance Options

# Set batch size
wp bp-member import /path/to/import.csv --batch-size=10

# Continue on errors
wp bp-member import /path/to/import.csv --skip-errors

# Verbose error reporting
wp bp-member import /path/to/import.csv --verbose-errors

# Memory optimization for large imports
wp bp-member import /path/to/import.csv --optimize

Complete Import Examples

Example 1: New User Import

wp bp-member import /path/to/new-users.csv \
  --auto-map \
  --default-role=subscriber \
  --send-notifications \
  --batch-size=25 \
  --progress

Example 2: Update Existing Users

wp bp-member import /path/to/updates.csv \
  --mapping=field-mapping.json \
  --update-existing \
  --skip-errors \
  --verbose-errors \
  --progress

Example 3: Migration Import

# First, dry run to check
wp bp-member import /migration/users.csv \
  --dry-run \
  --show-mapping \
  --update-existing

# Then actual import
wp bp-member import /migration/users.csv \
  --mapping=migration-mapping.json \
  --update-existing \
  --batch-size=50 \
  --optimize \
  --progress

Utility Commands

List xProfile Structure

List Groups

# List all xProfile groups
wp bp-member list --type=groups

# Format as JSON
wp bp-member list --type=groups --format=json

# Include field count
wp bp-member list --type=groups --include-counts

List Fields

# List all fields
wp bp-member list --type=fields

# List fields in specific group
wp bp-member list --type=fields --group=1

# Include field options
wp bp-member list --type=fields --include-options

# Format as CSV
wp bp-member list --type=fields --format=csv > fields.csv

Member Statistics

Basic Stats

# Show member statistics
wp bp-member stats

# Include role breakdown
wp bp-member stats --by-role

# Include registration dates
wp bp-member stats --by-date

# Include xProfile completion
wp bp-member stats --profile-completion

Advanced Statistics

# Full statistical report
wp bp-member stats \
  --by-role \
  --by-date \
  --profile-completion \
  --format=json > stats.json

# Group membership stats
wp bp-member stats --groups

# Activity statistics
wp bp-member stats --activity --days=30

Generate Mapping Template

Basic Mapping

# Generate mapping from CSV headers
wp bp-member mapping --csv=/path/to/import.csv

# Save to file
wp bp-member mapping --csv=/path/to/import.csv > mapping.json

# Include all available fields
wp bp-member mapping --csv=/path/to/import.csv --all-fields

Advanced Mapping

# Generate with field descriptions
wp bp-member mapping \
  --csv=/path/to/import.csv \
  --include-descriptions

# Auto-detect mapping
wp bp-member mapping \
  --csv=/path/to/import.csv \
  --auto-detect

# Custom mapping rules
wp bp-member mapping \
  --csv=/path/to/import.csv \
  --rules=/path/to/rules.json

Advanced Usage

Batch Processing Large Datasets

Export in Chunks

#!/bin/bash
# Export 100K users in 10K chunks

TOTAL_USERS=100000
CHUNK_SIZE=10000
OUTPUT_DIR="/exports/chunks"

for i in $(seq 0 $CHUNK_SIZE $TOTAL_USERS); do
    wp bp-member export \
        --limit=$CHUNK_SIZE \
        --offset=$i \
        --output="${OUTPUT_DIR}/users_${i}.csv" \
        --optimize \
        --quiet
    echo "Exported chunk: $i to $((i+CHUNK_SIZE))"
done

Import in Batches

#!/bin/bash
# Import large CSV in smaller chunks

CSV_FILE="/imports/large-import.csv"
LINES=$(wc -l < "$CSV_FILE")
CHUNK_SIZE=5000

# Split CSV into chunks
split -l $CHUNK_SIZE "$CSV_FILE" /tmp/chunk_

# Import each chunk
for chunk in /tmp/chunk_*; do
    wp bp-member import "$chunk" \
        --auto-map \
        --update-existing \
        --batch-size=50 \
        --skip-errors \
        --quiet
    echo "Imported: $chunk"
    rm "$chunk"  # Clean up
done

Custom Field Processing

Export with Custom Processing

# Export and post-process
wp bp-member export --format=json | \
jq '.[] | select(.role == "subscriber") | {
    username: .user_login,
    email: .user_email,
    profile: .xprofile
}' > processed-export.json

Import with Pre-processing

# Pre-process CSV before import
awk -F',' 'BEGIN {OFS=","}
NR==1 {print}  # Keep header
NR>1 {
    # Process fields
    $3 = tolower($3)  # Lowercase email
    gsub(/[^0-9]/, "", $5)  # Clean phone number
    print
}' input.csv > processed.csv

wp bp-member import processed.csv --auto-map

Integration with Other Systems

Export to External Database

# Export and insert into MySQL
wp bp-member export --format=json | \
jq -r '.[] | [.user_id, .user_login, .user_email] | @csv' | \
mysql -u user -p database -e "
    LOAD DATA LOCAL INFILE '/dev/stdin'
    INTO TABLE external_users
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'"

Sync with External API

#!/bin/bash
# Export and sync with external API

wp bp-member export --format=json | \
jq -c '.[]' | \
while read -r user; do
    curl -X POST https://api.example.com/users \
        -H "Content-Type: application/json" \
        -H "Authorization: Bearer $API_TOKEN" \
        -d "$user"
done

Performance Optimization

Memory Management

Configure PHP Memory

# Temporarily increase memory for export
wp bp-member export --optimize --php-memory=512M

# For import
wp bp-member import large.csv --optimize --php-memory=1G

Monitor Memory Usage

# Export with memory monitoring
wp bp-member export \
  --progress \
  --debug \
  2>&1 | tee export.log | \
  grep -E "(Memory|Peak)"

Database Optimization

Optimize Before Operations

# Optimize database tables
wp db optimize

# Clear transients
wp transient delete --all

# Clear object cache
wp cache flush

Index Optimization

# Add indexes for better performance
wp db query "
    ALTER TABLE wp_bp_xprofile_data
    ADD INDEX idx_user_field (user_id, field_id);
"

Parallel Processing

Parallel Export

#!/bin/bash
# Export different user groups in parallel

wp bp-member export --role=administrator --output=admins.csv &
wp bp-member export --role=editor --output=editors.csv &
wp bp-member export --role=subscriber --output=subscribers.csv &

wait  # Wait for all exports to complete

# Combine results
cat admins.csv > all-users.csv
tail -n +2 editors.csv >> all-users.csv
tail -n +2 subscribers.csv >> all-users.csv

Parallel Import

#!/bin/bash
# Import multiple CSV files in parallel

for csv in imports/*.csv; do
    wp bp-member import "$csv" \
        --auto-map \
        --batch-size=25 \
        --quiet &
done

wait  # Wait for all imports

Automation & Scripting

Scheduled Exports

Daily Backup Script

#!/bin/bash
# daily-backup.sh - Run via cron

DATE=$(date +%Y%m%d)
BACKUP_DIR="/backups/members"
RETENTION_DAYS=30

# Create backup
wp bp-member export \
    --output="${BACKUP_DIR}/members_${DATE}.csv" \
    --optimize \
    --quiet

# Compress
gzip "${BACKUP_DIR}/members_${DATE}.csv"

# Remove old backups
find "$BACKUP_DIR" -name "*.csv.gz" -mtime +$RETENTION_DAYS -delete

# Log
echo "[$(date)] Backup completed: members_${DATE}.csv.gz" >> /var/log/bp-backup.log

Cron Setup

# Add to crontab
0 2 * * * /path/to/daily-backup.sh

# Weekly full export
0 3 * * 0 wp bp-member export --output=/weekly/full-export.csv --optimize

# Monthly statistics
0 4 1 * * wp bp-member stats --format=json > /reports/stats-$(date +%Y%m).json

Import Automation

Watch Folder for Imports

#!/bin/bash
# watch-imports.sh - Monitor folder for CSV files

IMPORT_DIR="/imports/pending"
PROCESSED_DIR="/imports/processed"
ERROR_DIR="/imports/errors"

inotifywait -m "$IMPORT_DIR" -e create -e moved_to |
while read path action file; do
    if [[ "$file" =~ .*\.csv$ ]]; then
        echo "Processing: $file"

        if wp bp-member import "${IMPORT_DIR}/${file}" \
            --auto-map \
            --update-existing \
            --batch-size=25; then
            mv "${IMPORT_DIR}/${file}" "${PROCESSED_DIR}/"
            echo "Success: $file"
        else
            mv "${IMPORT_DIR}/${file}" "${ERROR_DIR}/"
            echo "Error: $file"
        fi
    fi
done

Integration Scripts

Sync with External System

#!/bin/bash
# sync-members.sh - Bidirectional sync

# Export from WordPress
wp bp-member export --format=json > wp-users.json

# Fetch from external system
curl -H "Authorization: Bearer $TOKEN" \
    https://api.external.com/users > external-users.json

# Compare and generate import CSV
jq -r '
    . as $external |
    inputs as $wp |
    ($external | map({(.email): .}) | add) as $ext_map |
    ($wp | map({(.user_email): .}) | add) as $wp_map |
    $external[] |
    select($wp_map[.email] == null) |
    [.email, .name, .phone] |
    @csv
' external-users.json wp-users.json > new-users.csv

# Import new users
if [ -s new-users.csv ]; then
    wp bp-member import new-users.csv --auto-map
fi

Troubleshooting

Common Issues

Memory Errors

# Check current memory limit
wp eval 'echo "Memory limit: " . ini_get("memory_limit") . "\n";'

# Run with increased memory
wp bp-member export --optimize --php-memory=512M

# Use smaller batch sizes
wp bp-member import large.csv --batch-size=5

Timeout Issues

# Increase execution time
wp bp-member import large.csv --php-timeout=0

# Use background processing
nohup wp bp-member import large.csv > import.log 2>&1 &

# Check progress
tail -f import.log

Encoding Problems

# Check file encoding
file -bi import.csv

# Convert to UTF-8
iconv -f ISO-8859-1 -t UTF-8 import.csv > import-utf8.csv

# Import with encoding specified
wp bp-member import import-utf8.csv --encoding=UTF-8

Debug Mode

Enable Debugging

# Run with debug output
wp bp-member export --debug 2> debug.log

# Verbose mode
wp bp-member import import.csv --verbose

# SQL query logging
wp bp-member export --debug=sql

Check Logs

# View WordPress debug log
tail -f wp-content/debug.log

# Check PHP error log
tail -f /var/log/php-error.log

# Plugin specific log
tail -f wp-content/bpxp-operations.log

Performance Analysis

Profile Export Performance

# Time the export
time wp bp-member export --output=test.csv

# Memory profiling
wp bp-member export --profile=memory

# Query analysis
wp bp-member export --profile=queries

Optimize Slow Imports

# Analyze import bottlenecks
wp bp-member import test.csv \
    --dry-run \
    --profile=all \
    --verbose

# Test different batch sizes
for size in 5 10 25 50; do
    echo "Testing batch size: $size"
    time wp bp-member import test.csv \
        --batch-size=$size \
        --limit=100
done

Best Practices

Before Operations

  1. Always backup database
  2. Test on staging environment first
  3. Check available disk space
  4. Verify PHP settings (memory, execution time)
  5. Clear caches

During Operations

  1. Use --progress for visibility
  2. Start with small batches
  3. Monitor server resources
  4. Use --skip-errors for resilience
  5. Log output for debugging

After Operations

  1. Verify data integrity
  2. Clear caches again
  3. Check error logs
  4. Document any issues
  5. Keep backups of import/export files

Command Reference

Quick Reference

# Export
wp bp-member export [--output=<file>] [--user-ids=<ids>] [--fields=<ids>]
                   [--groups=<ids>] [--standard-fields] [--user-meta]
                   [--avatars] [--batch-size=<size>] [--optimize]

# Import
wp bp-member import <file> [--mapping=<file>] [--auto-map]
                   [--update-existing] [--batch-size=<size>]
                   [--default-role=<role>] [--send-notifications]

# List
wp bp-member list --type=<groups|fields> [--format=<format>]

# Stats
wp bp-member stats [--by-role] [--by-date] [--profile-completion]

# Mapping
wp bp-member mapping --csv=<file> [--auto-detect] [--all-fields]

Support

For CLI-specific help:

  1. Use wp help bp-member  for detailed command help
  2. Check WP-CLI documentation at wp-cli.org
  3. Plugin support at wbcomdesigns.com
Last updated: September 30, 2025