While designing a recent WordPress plug-in for TruthMedia that was designed to follow MVC, I had an awful lot of database work to do, and it needed to all be properly secured, which was a lot of work, and while making a rather large change to the way the database worked, I realized that writing all the db code by hand was crazy inefficient.
So I wrote a class that you can extend with any model class of your own, and it will automatically have create, read, update, and delete functionality with no more work required. It also uses all of the WordPress security features to properly escape everything and prevent injection. Although, if you can crack it I’d love to hear from you!
Click here to download!
This is how it works:
- Create a new class (ex. person)
- Give that class instance variables (ID, FirstName, LastName, Address, PhoneNumber, PostalCode, HairColour…)
- Make sure that you add accessor methods (getters and setters) for the ID (although it’s good practice to have them for all instance variables). Depending on your project, it may be a good idea to run stripslashes() on your string get functions so that they don’t show up with escaping. You may want to run WordPress’ attribute_escape() on setters, however, again, depending on your set up this may be unnecessary.
- Write your SQL code to create a table named (wordPress prefix)(plugin prefix)person (ex. wp_wec_person)
- Make sure you call your primary Key personID **This is very important, without this, the system breaks down**
- If you wish to store variables in this class, you can modify them to be private, and they won’t be written to the database
In your class, extend the class name, so for example:
class person extends wec_db {
var $ID;
var $FirstName;
function __construct($id = null, $autoload = true){
//If we are given an ID
if(!empty($eventID)){
$this->setID($eventID);
if($autoPopulate){
$this->read();
}
}
}
//getters and setters, and any other methods for this object
}
Setup Note: to keep your plugin from stepping on the toes of others, make sure you change the prefix at the top of the class. Also, changing the name of the class to (plugin prefix)db (example:wec_db) will make sure that it doesn’t interfere with anyone else’s if they’re using this class!
Usage:
Create / Add
$person = new person();
$person->setFirstName(‘Joe’);
$person->setLastName(‘Blow’);
$person->add();
Read
$person = new person($personID);
Update
$person = new person($personID);
–or–
$person = new person($personID, false);
$person->setFirstName(‘Jane’);
$person->update();
Delete
$person = new person($personID, false);
$person->delete();
Post any questions in the comments! I’d love to hear from you!