Custom WP-CLI komande: kako upravljati WordPress sajtom sa 38.000 postova bez admin panela

· 6 min
Sadržaj

38.000 postova. 797 institucija. 52.000 tagova.

Ne možete upravljati ovim kroz WordPress admin. Klik-klik-klik bi trajao mesecima.

WP-CLI custom commands su kako to zapravo radite.

Zašto ne admin UI?

WordPress admin je odličan za:

  • Pisanje jednog posta
  • Upload jedne slike
  • Editovanje par meta podataka

WordPress admin nije odličan za:

  • Audit 38.000 postova
  • Migracija 28.000 fajlova na R2
  • Backfill metadata za 17.000 dokumenata

Za bulk operacije, potreban vam je CLI.

9+ komandi koje pokreću platformu

# Revizija postova za probleme kvaliteta
wp studenti audit-posts

# Migracija fajlova na Cloudflare R2
wp studenti migrate-r2

# Backfill institucija za postojeće dokumente
wp studenti backfill-institutions

# Backfill AI excerpts
wp studenti backfill-excerpts

# Import institucija iz JSON-a
wp studenti institutions import_all

# Logo CLI za institucije
wp studenti logo-cli

# Draft audit
wp studenti draft-audit

# Statistike institucija
wp studenti institutions stats

# Reklasifikacija dokumenata
wp studenti documents reclassify_institutions

Pattern: Dry-run uvek

Svaka destruktivna komanda ima --dry-run flag.

# Vidi šta bi se desilo
wp studenti migrate-r2 --dry-run

# Output:
# Would process 1,234 posts
# Would upload 1,234 files to R2
# Would update 1,234 meta fields

# Kada si siguran
wp studenti migrate-r2

Nikada ne trčite bulk operaciju bez dry-run-a prvo.

Pattern: Batch processing

38.000 postova odjednom = memory overflow.

# Procesiraj 100 po 100
wp studenti audit-posts --batch=100

# Nastavi od offseta
wp studenti audit-posts --batch=100 --offset=5000

Progress bar pokazuje gde ste. Ako se prekine, znate odakle da nastavite.

Pattern: Progress bars

$progress = WP_CLIUtilsmake_progress_bar('Processing posts', $total);

foreach ($posts as $post) {
    // Process...
    $progress->tick();
}

$progress->finish();
Processing posts  [======================>   ] 75% 00:03:45

Znate koliko dugo će trajati. Znate da nije freeze.

Pattern: CSV export

wp studenti audit-posts --export=audit-results.csv

Output:

post_id,title,issue,suggested_fix
12345,"SEMINARSKI RAD","uppercase","Seminarski rad o..."
12346,"dokument1","too_short","Analiza makroekonomskih..."

Možete pregledati rezultate u Excel/Google Sheets pre nego što primenite.

Pattern: Rate limiting

Eksterni API-ji (Gemini, R2) imaju limite.

// Process in batches with delay
foreach (array_chunk($posts, 10) as $batch) {
    foreach ($batch as $post) {
        $this->process($post);
    }
    sleep(1); // Rate limit: 10 per second
}

Bez rate limiting-a, API će vas blokirati.

Primer: audit-posts

Najkompleksnija komanda. Šta radi:

  1. Query sve postove sa potencijalnim problemima
  2. Za svaki post, detektuj issue (uppercase, too short, etc.)
  3. Ako --fix, pošalji R2 markdown Gemini-ju za reklasifikaciju
  4. Primeni AI sugestije
  5. Log rezultate
# Samo detektuj
wp studenti audit-posts --dry-run

# Detektuj i exportuj
wp studenti audit-posts --export=issues.csv

# Popravi sve
wp studenti audit-posts --fix

# Popravi samo kategorije
wp studenti audit-posts --fix --only=categories

Rezultat: 3.948 problema detektovano. 3.253 popravljeno. 695 nepopravljivo (nema R2 source).

Primer: institutions import

Import 797 institucija iz JSON-a:

# Dry run
wp studenti institutions import_all --dry-run

# Import sa force update postojećih
wp studenti institutions import_all --force

# Samo jedna zemlja
wp studenti institutions import --country=rs

JSON struktura:

{
  "universities": [
    {
      "name": "Univerzitet u Beogradu",
      "faculties": [
        { "name": "Pravni fakultet", "aliases": ["PF"] }
      ]
    }
  ]
}

Komanda parsira, kreira taxonomy terme, postavlja meta, linkuje hijerarhiju.

Registracija custom komandi

// class-studenti-cli.php

if (defined('WP_CLI') && WP_CLI) {
    WP_CLI::add_command('studenti audit-posts', 'Studenti_CLI_Audit_Posts');
    WP_CLI::add_command('studenti migrate-r2', 'Studenti_CLI_Migrate_R2');
    // ...
}
// class-studenti-cli-audit-posts.php

class Studenti_CLI_Audit_Posts {

    /**
     * Audit posts for quality issues.
     *
     * ## OPTIONS
     *
     * [--dry-run]
     * : Don't make changes, just report.
     *
     * [--batch=<number>]
     * : Process in batches. Default 100.
     *
     * [--fix]
     * : Apply AI-suggested fixes.
     *
     * ## EXAMPLES
     *
     *     wp studenti audit-posts --dry-run
     *     wp studenti audit-posts --fix --batch=50
     */
    public function __invoke($args, $assoc_args) {
        // Implementation
    }
}

PHPDoc blok = automatski --help output.

Kada koristiti custom command

  • Bulk operacije — Više od 100 itema
  • Data migracije — Batch processing sa recovery
  • Automated tasks — Cron jobs, CI/CD
  • Debugging — Inspect state, run diagnostics
  • One-time scripts — Migracije, cleanups

Kada NE koristiti:

  • Jednostavne operacije (koristi admin)
  • User-facing features (koristi REST API)

WP-CLI custom commands su kako upravljate WordPress sajtom na skali.

38.000 postova. Klik-klik nije opcija. Batch processing sa dry-run, progress bars, i CSV export — to je profesionalni pristup.

Patterns:

  • Dry-run uvek
  • Batch processing
  • Progress bars
  • CSV export
  • Rate limiting

Ove komande su razlog zašto mogu da upravljam platformom bez tima.