PHP code example of kynetcode / wpzylos-queue

1. Go to this page and download the library: Download kynetcode/wpzylos-queue library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

kynetcode / wpzylos-queue example snippets


use WPZylos\Framework\Queue\QueueServiceProvider;

// In your plugin bootstrap
$app->register(new QueueServiceProvider());

use WPZylos\Framework\Queue\Job;

class SendWelcomeEmail extends Job
{
    protected int $tries = 3;
    protected int $retryAfter = 120; // 2 minutes
    protected int $timeout = 30;

    public function __construct(private int $userId) {}

    public function handle(): void
    {
        $user = get_userdata($this->userId);
        wp_mail($user->user_email, 'Welcome!', 'Thanks for joining.');
    }

    public function failed(\Throwable $exception): void
    {
        error_log("Failed to send welcome email to user {$this->userId}: {$exception->getMessage()}");
    }
}

use WPZylos\Framework\Queue\Queue;

$queue = $app->make(Queue::class);

// Dispatch immediately
$queue->push(new SendWelcomeEmail(123));

// Dispatch with 1-hour delay
$queue->later(3600, new SendWelcomeEmail(456));

use WPZylos\Framework\Queue\Job;

class GenerateReport extends Job
{
    protected int $tries = 5;
    protected int $retryAfter = 300; // 5 minutes
    protected int $timeout = 120;    // 2 minutes max
    protected string $queue = 'reports';

    public function __construct(
        private int $reportId,
        private string $format
    ) {}

    public function handle(): void
    {
        // Generate report...
        $report = ReportBuilder::generate($this->reportId, $this->format);
        
        // Save to uploads
        file_put_contents(
            wp_upload_dir()['basedir'] . "/reports/{$this->reportId}.{$this->format}",
            $report
        );
    }

    public function failed(\Throwable $exception): void
    {
        update_post_meta($this->reportId, '_report_status', 'failed');
    }
}

$queue = $app->make(Queue::class);

// Push a job
$jobId = $queue->push(new GenerateReport(42, 'pdf'));

// Delayed dispatch (seconds)
$queue->later(1800, new GenerateReport(42, 'csv')); // 30 min delay

// Check queue size
$pending = $queue->size('default'); // Count pending jobs
$reports = $queue->size('reports'); // Count by queue name

// Clear a queue
$queue->clear('default');

$queue = $app->make(Queue::class);

// Get all failed jobs
$failures = $queue->failed();

foreach ($failures as $failure) {
    echo "{$failure->queue}: {$failure->exception}\n";
}

// Retry a failed job (re-queues it)
$queue->retryFailed($failureId);

// Delete a specific failed job
$queue->deleteFailed($failureId);

// Clear all failed jobs
$queue->clearFailed();

use WPZylos\Framework\Queue\Worker;

$worker = $app->make(Worker::class);

// Process a single job
$worker->process('default');

// Process up to 25 jobs
$processed = $worker->run(25, 'default');
echo "Processed {$processed} jobs";

use WPZylos\Framework\Queue\QueueTableInstaller;

$installer = $app->make(QueueTableInstaller::class);

// Create tables (runs dbDelta)
$installer->install();

// Drop tables (on uninstall)
$installer->uninstall();

use WPZylos\Framework\Queue\QueueCronHandler;

$cron = $app->make(QueueCronHandler::class);

// Change batch size (default: 10)
$cron->setBatchSize(25);

// Manual registration (auto-done by ServiceProvider)
$cron->register();

// Cleanup on plugin deactivation
$cron->unregister();