Πώς να κατασκευάσετε ένα απλό WordPress plugin

WordPress Plugins

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

Πώς να κατασκευάσετε ένα απλό WordPress plugin

Δημοσίευση από burnmind » 18 Ιουν 2011 23:09

Ας θεωρήσουμε πως γράφετε ένα e-book και θέλετε να μαζέψετε e-mails από αναγνώστες του blog σας που ενδιαφέρονται να ενημερωθούν μόλις αυτό κυκλοφορήσει. Χρειάζεστε ένα plugin. Ok, υπάρχουν πάρα πολλά mailing list plugins που μπορείτε να χρησιμοποιήσετε γρήγορα κι εύκολα, αλλά η ουσία του post είναι να δημιουργήσουμε ένα νέο από το μηδέν για εκπαιδευτικούς λόγους.

Αρχικά πρέπει να δημιουργήσουμε ένα νέο .php αρχείο. Ας το ονομάσουμε "quickndirty.php". Οι πρώτες γραμμές σε ένα WordPress plugin αφορούν τις πληροφορίες που εμφανίζονται στη σελίδα "Plugins" του admin panel:

Κώδικας: Επιλογή όλων

/*
Plugin Name: Quick'n'Dirty
Plugin URI: http://www.burnmind.com/howto/how-to-build-a-quick-n-dirty-wordpress-plugin
Version: v1.00
Author&#58; <a href="http&#58;//www.burnmind.com/">burnmind.com</a>
Description&#58; A Quick'n'Dirty WordPress plugin
 */
Το plugin αποτελείται από μία και μόνο class που θα την ονομάσουμε "Qnd" (από το Quick’n'dirty). Όλες οι functions του plugin θα περιέχονται μέσα σ’αυτή την class. Δηλώνουμε 2 private μεταβλητές. Η μία περιέχει το όνομα του πίνακα που θα αποθηκεύουμε τις πληροφορίες στη βάση (προσοχή στο όνομα, πρέπει να είναι πρωτότυπο ώστε να μη δημιουργηθούν conflicts με άλλους πίνακες) και μία που θα έχει ένα instance του wpdb:

Κώδικας: Επιλογή όλων

if &#40;!class_exists&#40;"qnd"&#41;&#41;
&#123;
    class Qnd
    &#123;
        private $wpdb;
        private $qndTable;
 
        public function __construct &#40;&#41;
        &#123;
            global $wpdb;
            $this->wpdb = $wpdb;
            $this->qndTable = $wpdb->prefix . "qnd";
        &#125;
    &#125;
&#125;
Η πρώτη function είναι αυτή που θα εκτελείτε όταν το plugin ενεργοποιείται από το admin panel και θα είναι υπεύθυνη ώστε να δημιουργεί τον πίνακα στη βάση. Ο πίνακας θα δημιουργηθεί μόνο αν δεν υπάρχει ήδη και δε θα διαγραφεί όταν το plugin απενεργοποιηθεί. Ο πίνακας αποτελείται από 4 πεδία.

Κώδικας: Επιλογή όλων

function createTable&#40;&#41;
&#123;
    if&#40;$this->wpdb->get_var&#40;"show tables like '$this->qndTable'"&#41; != $this->qndTable&#41;
    &#123;
        $create =   "CREATE TABLE " . $this->qndTable . " &#40;
                    id int&#40;20&#41; NOT NULL AUTO_INCREMENT,
                    name varchar&#40;300&#41; NOT NULL,
                    email varchar&#40;300&#41; NOT NULL,
                    location varchar&#40;300&#41; NOT NULL,
                    PRIMARY KEY &#40;id&#41;
                    &#41; ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1; ";
 
        require_once&#40;ABSPATH . 'wp-admin/includes/upgrade.php'&#41;;
        dbDelta&#40;$create&#41;;
    &#125;
&#125;
Σειρά παίρνει ο controller. Η λειτουργία του είναι πολύ απλή: Αν η form έχει γίνει submit (POST request) τότε θα προσπαθήσει να εισάγει τις πληροφορίες στη βάση, αλλιώς θα εμφανίσει τη φόρμα:

Κώδικας: Επιλογή όλων

function controler&#40;&#41;
&#123;
    if &#40;isset&#40;$_POST&#91;'nameField'&#93;&#41;&#41;
    &#123;
        return $this->submitDetails&#40;&#41;;
    &#125;
    else
    &#123;
        return $this->displayForm&#40;false&#41;;
    &#125;
&#125;
Η displayForm function περιέχει τη form. Η μεταβλητή $error χρησιμοποιείται για να εμφανίζεται το κατάλληλο μήνυμα σε περίπτωση λάθους.

Κώδικας: Επιλογή όλων

function displayForm&#40;$error&#41;
&#123;
?>
	<p>Please complete the form to send you the e-book when it's published.</p>
	
	<?php if &#40;$error&#41; &#123; ?>
		<p style="color&#58;#FF0000;"><strong>Please complete all the required fields!</strong></p>
     <?php &#125; ?>
     
	<form method="post" action="<?php echo $_SERVER&#91;"REQUEST_URI"&#93;; ?>">
     <ul>
		<li>
			<label>Name&#58;</label><br /> <input type="text" name="nameField" value="<?php echo $_POST&#91;'nameField'&#93; ?>" /> &#40;required&#41;
		</li>
		<li>
			<label>E-mail&#58;</label><br /> <input type="text" name="emailField" value="<?php echo $_POST&#91;'emailField'&#93; ?>" /> &#40;required&#41;
		</li>
		<li>
			<label>Location&#58;</label><br /> <input type="text" name="locationField" value="<?php echo $_POST&#91;'locationField'&#93; ?>" />
		</li>
     </ul>
     <input type="submit" value="Submit" onclick="return validate&#40;&#41;" />
	</form>
<?php
&#125;
H submitDetails είναι η τελευταία function. Αρχικά, κάνει escape στα πεδία που εισήγαγε ο χρήστης ώστε να αποφευχθεί πιθανό SQL injection. Έπειτα ελέγχει αν το πεδίο του ονόματος ή του e-mail είναι κενό. Αν ένα από τα δύο ή και τα δύο είναι κενά, τότε εμφανίζει ξανά τη form με το μήνυμα λάθους. Σημείωση: Σε ένα κανονικό plugin, καλό θα ήταν να υπάρχει καλύτερο error reporting, έλεγχος για την εγκυρότητα του e-mail κλπ. Τέλος, αν όλα τα απαραίτητα πεδία έχουν συμπληρωθεί, εισάγει τα δεδομένα στη βάση και εμφανίζει ένα σχετικό μήνυμα αντί της form.

Κώδικας: Επιλογή όλων

function submitDetails&#40;&#41;
&#123;
    $name = $this->wpdb->escape&#40;$_POST&#91;'nameField'&#93;&#41;;
    $email = $this->wpdb->escape&#40;$_POST&#91;'emailField'&#93;&#41;;
    $location = $this->wpdb->escape&#40;$_POST&#91;'locationField'&#93;&#41;;
 
    if&#40;$name=='' || $email==''&#41;
    &#123;
        $this->insertForm&#40;true&#41;;
    &#125;
    else
    &#123;
        $insert = "INSERT INTO $this->qndTable
                   &#40;name, email, location&#41;
                   VALUES &#40;'$name', '$email', '$location'&#41;";
 
        $this->wpdb->query&#40;$insert&#41;;
        echo 'Your details have been submitted. Thank you!';
    &#125;
&#125;
Το plugin είναι σχεδόν έτοιμο. Τοποθετήστε τον παρακάτω κώδικα μετά την Qnd class. Ο κώδικας δημιουργεί ένα instance της class, συνδέει το shortcode "QUICKNDIRTY" με το plugin και δηλώνει πως η function createTable θα εκτελείτε κάθε φορά που θα ενεργοποιείται το plugin από το admin panel.

Κώδικας: Επιλογή όλων

if &#40;class_exists&#40;"qnd"&#41;&#41;
&#123;
    $qnd = new Qnd&#40;&#41;;
&#125;
 
if &#40;isset&#40;$qnd&#41;&#41;
&#123;
    add_shortcode&#40;'QUICKNDIRTY', array&#40; &$qnd, 'controler'&#41;&#41;;
    register_activation_hook&#40;__FILE__, array&#40;&$qnd, 'createTable'&#41;&#41;;
&#125;

Για να χρησιμοποιήσετε το plugin, τοποθετήστε το .php αρχείο στον φάκελο /wp-content/plugins, ενεργοποιήστε το από το admin panel, δημιουργήστε (ή κάντε edit) ένα post ή page και τοποθετήστε το shortcode:

Κώδικας: Επιλογή όλων

&#91;QUICKNDIRTY&#93;
Μπορείτε να βρείτε ένα demo εδώ και να κατεβάσετε τον κώδικα από εδώ.

(Το παραπάνω αποτελεί μετάφραση του how to build a quick ‘n’ dirty WordPress plugin)

Απάντηση

Επιστροφή στο “WordPress Plugins”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες