Skip to content

Instantly share code, notes, and snippets.

@borekb
Created January 15, 2016 14:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save borekb/dbad71aeecfcb368e899 to your computer and use it in GitHub Desktop.
Save borekb/dbad71aeecfcb368e899 to your computer and use it in GitHub Desktop.
wpdb proxy using ProxyManager
<?php
global $wpdb;
$factory = new \ProxyManager\Factory\AccessInterceptorValueHolderFactory();
$backupFields = array();
$prefixInterceptor = function ($proxy, wpdb $instance, $method, $params) use (&$backupFields) {
$backupFields["last_error"] = $instance->last_error;
$backupFields["last_query"] = $instance->last_query;
$backupFields["last_result"] = $instance->last_result;
$backupFields["rows_affected"] = $instance->rows_affected;
$backupFields["num_rows"] = $instance->num_rows;
$backupFields["insert_id"] = $instance->insert_id;
};
$createSuffixInterceptor = function ($hook) use (&$backupFields) {
return function ($proxy, wpdb $instance, $method, $params) use (&$backupFields, $hook) {
call_user_func_array($hook, $params);
$instance->last_error = $backupFields["last_error"];
$instance->last_query = $backupFields["last_query"];
$instance->last_result = $backupFields["last_result"];
$instance->rows_affected = $backupFields["rows_affected"];
$instance->num_rows = $backupFields["num_rows"];
$instance->insert_id = $backupFields["insert_id"];
};
};
$wpdbProxy = $factory->createProxy(
$wpdb,
array(
'insert' => $prefixInterceptor,
'update' => $prefixInterceptor,
'delete' => $prefixInterceptor,
),
array(
'insert' => $createSuffixInterceptor(function ($table, $data) {
do_action("wpdb_after_insert", $table, $data);
}),
'update' => $createSuffixInterceptor(function ($table, $data, $where) {
do_action("wpdb_after_update", $table, $data, $where);
}),
'delete' => $createSuffixInterceptor(function ($table, $where) {
do_action( "wpdb_after_delete", $table, $where );
}),
));
$wpdb = $wpdbProxy;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment