If you need to change many items of the same type (posts, users, etc.) in WordPress (with possible Out-of-Memory result) this library helps you to write less code and avoid OOM.
composer require versusbassz/wp-batcher 0.1.*
Imagine you have 100000 posts in a database, and you need to iterate over them and change somehow.
Of course, you can't just use get_posts( [ 'nopaging' => true ] )
,
because you'll get Fatal error: memory limit has been exceeded bla bla bla...
.
So to do the job you need to handle you posts consequentially chunk by chunk (e.g. 100 posts at a time).
The example of code without using the library:
$paged = 1;
wp_suspend_cache_addition( true );
while ( true ) {
$items = get_posts( [
'posts_per_page' => 100,
'paged' => $paged,
'orderby' => 'ID',
'order' => 'ASC',
] );
if ( ! count( $items ) ) {
break;
}
foreach ( $items as $item ) {
// Payload
}
++$paged;
}
wp_suspend_cache_addition( false );
With using the library the code above turns into to:
use \Versusbassz\WpBatcher\WpBatcher;
$iterator = WpBatcher::get_posts();
foreach ( $iterator as $item ) {
// Payload
}
And the library does more than just wp_suspend_cache_addition()
under the hood.
See Wiki
- PHP >= 5.6 (the target version is a version required by WordPress)
- WordPress 5.7+
The project follows https://semver.org/
The license of the project is GPL v2 (or later)