1. Go to this page and download the library: Download boxybird/waffle 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/ */
boxybird / waffle example snippets
// Define a job class
class LongRunningJob
{
/**
* The number of times the job may be attempted.
*
* @var int
*/
public $tries = 5;
/**
* The maximum number of unhandled exceptions to allow before failing.
*
* @var int
*/
public $maxExceptions = 3;
/**
* Indicate if the job should be marked as failed on timeout.
*
* @var bool
*/
public $failOnTimeout = true;
/**
* The number of seconds to wait before retrying the job.
*
* @var int
*/
public $backoff = 3;
/**
* The number of seconds the job can run before timing out.
*
* @var int
*/
public $timeout = 120;
/**
* Handle the job.
*
*/
public function fire($job, $data)
{
// Simulate long running code
sleep($data['how_long']);
// Something may or may not have gone wrong
$oops = false;
// If $oops === true release the job back to the queue to try
// again based on waffle_worker()->setOptions(['maxTries' => 3 // default is 1])
// Failed jobs are caught and stored in the database and can be
// viewed in the admin (/wp-admin/tools.php?page=waffle-options.php)
if ($oops) {
return $job->release();
}
// Delete the job from the queue
$job->delete();
}
}
// Push a job onto the default queue
waffle_queue()->push(LongRunningJob::class, ['how_long' => 5]);
// Push a job onto a custom queue
waffle_queue()->push(LongRunningJob::class, ['how_long' => 5], 'my_custom_queue');
// Run the default queue worker in the background
waffle_worker()->work();
// Run the custom queue worker in the background
waffle_worker(['my_custom_queue'])->work();
// Run multiple queue workers in the background. Array order determines the priority
waffle_worker(['my_custom_queue', 'default'])->work();
// Run a queue worker in the background with overridden global options
waffle_worker()->setOptions([
'memory' => 256, // default is 128 (MB)
'sleep' => 3, // default is 0 (seconds to sleep after each job)
'maxTries' => 3, // default is 1 (number of times to try a job before failing)
'maxJobs' => 3, // default is 500 (number of jobs to process before stopping)
'maxTime' => 90, // default is 60 (number of seconds to process each job before stopping)
'timeout' => 120, // Attempts to default to 80% of the servers max_execution_time, else default is 60 seconds (server timeout/worker timeout)
])->work();
// Notes on setOptions():
// Both 'timeout' and 'maxTime' work hand in hand as exceptions are thrown if either exceeds server timeout
// Defined Job class properties will override global setOptions() values
// Notes on workers:
// Workers use WP-Cron to run in the background. The interval is 60 seconds
// Only a single worker can be run at a time. The last declared worker will be the one that runs
waffle_worker()->work(); // This will not run
waffle_worker(['my_custom_queue', 'default'])->work(); // This will run
// Create a custom table in the database if it doesn't exist
if (!waffle_db()->schema()->hasTable('waffle_custom_table')) {
waffle_db()->schema()->create('waffle_custom_table', function ($table) use ($wpdb) {
$table->increments('id');
$table->bigInteger('user_id')->unsigned();
$table->string('extra_user_content');
$table->timestamp('created_at')->default(waffle_db()::raw('CURRENT_TIMESTAMP'));
$table->timestamp('updated_at')->default(waffle_db()::raw('CURRENT_TIMESTAMP'));
$table->foreign('user_id')->references('ID')->on('wp_users');
});
}
// Insert data
waffle_db()->table('waffle_custom_table')->insert([
'user_id' => get_current_user_id(),
'extra_user_content' => 'Some extra content about the user.',
]);
// Query new table and join with user table
$query = waffle_db()
->table('waffle_custom_table')
->join('wp_users', 'wp_users.ID', '=', 'waffle_custom_table.user_id')
->select('wp_users.*', 'waffle_custom_table.extra_user_content')
->where('waffle_custom_table.user_id', get_current_user_id())
->get();
// Cache forever, or until the cache is flushed
waffle_cache()->put('foo', 'bar');
// Cache for 60 seconds
waffle_cache()->put('foo', 'bar', 60);
// Get cached value
$foo = waffle_cache()->get('foo');
// Flush the cache
waffle_cache()->flush();
// -----
// Cache the query results for 1 hour. If the hour is up, the query will be run again.
$posts = waffle_cache()->remember('posts', HOUR_IN_SECONDS, function () {
$query = new WP_Query([
// SOME EXPENSIVE QUERY ARGS
]);
return $query->get_posts();
});
// Flush the cache on some action
add_action('save_post', function ($post_id) {
// Flush the entire cache
waffle_cache()->flush();
// Flush a specific key
waffle_cache()->forget('posts');
});
// Handle logic to determine 'status' of the user
// Store items in the session
waffle_session()->put('status', $active);
// Retrieve an item from the session if it exists
if (waffle_session()->has('status')) {
echo waffle_session()->get('status');
}
// Handle example form submission...
// Store items in the session for the next request only
waffle_session()->flash('message', 'Thanks for signing up!');
// Retrieve a flash message if it exists
if (waffle_session()->has('message')) {
echo waffle_session()->get('message');
}