Hướng dẫn viết một WordPress Plugin cơ bản

Đây là bài viết số 1 trong 5 bài viết của loạt series Plugin Wordpress

Hướng dẫn viết WordPress Plugin cơ bản

WordPress Plugin là tập lệnh PHP mở rộng chức năng của trang web. Nó có thể dễ dàng tải xuống và cài đặt lên WordPress Site.

Bạn có thể tạo những plugin của riêng mình và sử dụng chúng.

Tất cả những plugin được quản lý trong thư mục /wp-content/plugins/

Sau đây, mình sẽ hướng dẫn các bạn tạo 1 plugin wordpress đơn giản có kết hợp cơ sở dữ liệu

1. Tạo thư mục và tập tin

Tạo một thư mục mới lbk-plugin vào /wp-content/plugins/

lbk-plugin

Trong đó:

  • lbk-plugin.php – Tệp xác định chi tiết plugin, tạo bảng MySQL mới, kích hoạt plugin, menu page và menu con (submenu)
  • addentry.php – Thêm bản ghi mới vào CSDL
  • displaylist.php – Hiển thị danh sách các bản ghi

2. lbk-plugin.php

Chỉ định tên Plugin, link Plugin, mô tả (Description), Tác giả, v..v… trong /** */

 
/**
 * @link https://lbk.vn
 * @since 1.0.0
 * @package LBK_Plugin
 *
 * @wordpress-plugin 
 * Plugin Name: LBK Plugin
 * Plugin URI: https://lbk.vn/lbk-plugin
 * Description: Simple Plugin
 * Author: Briki LBK
 * Author URI: https://lbk.vn/
 * Version: 1.0.0
 * License: GPL-2.0+
 * License URI: http://www.gnu.org/licenses/gpl-2.0.txt
 * Text Domain: lbk-plugin 
 */ 

2.1. Tạo bảng CSDL

// Create a new table
function lbk_plugin_table_db() {
  global $wpdb;

  $charset_collate = $wpdb->get_charset_collate();

  $table_name  = $wpdb->prefix . 'lbk_plugin';

  $sql = "CREATE TABLE $table_name (
    id mediumint(11) NOT NULL AUTO_INCREMENT,
    name varchar(80) NOT NULL,
    username varchar(80) NOT NULL,
    email varchar(80) NOT NULL,
    PRIMARY KEY (id)
  ) $charset_collate;";

  require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
  dbDelta( $sql );
}
register_activation_hook( __FILE__, 'lbk_plugin_table_db' );

2.2. Thêm Menu và Submenu

Tạo 1 function lbkplugin_menu().

Để thêm menu và submenu, chúng ta sử dụng function add_menu_page()add_submenu_page()

Chúng ta tạo 1 Menu LBK Plugin và 2 Submenu All EntriesAdd New Entry


function lbkplugin_menu() {
  add_menu_page( 'LBK Plugin', 'LBK Plugin', 'manage_options', 'lbk-plugin', 'displayList', plugins_url('/lbk-plugin/img/icon.png') );
  add_submenu_page( 'lbk-plugin', 'All Entries', 'All Entries', 'manage_options', 'allentries', 'displayList' );
  add_submenu_page( 'lbk-plugin', 'Add New Entry', 'Add New Entry', 'manage_options', 'addnewentry', 'addEntry' );
}
add_action( 'admin_menu', 'lbkplugin_menu' );

function displayList() {
  include 'displaylist.php';
}

function addEntry() {
  include 'addentry.php';
}

3. displaylist.php

Lấy dữ liệu từ bảng lbk_plugin. Trong mỗi thẻ <tr> tạo 1 link Delete ?page=allentries&delid='.$id.'

Khi click vào DELETE, thực hiện truy vấn trên $_GET['delid']

<?php
global $wpdb;
$tablename = $wpdb->prefix.'lbk_plugin';

// Delete record
if ( isset( $_GET['delid'] ) ) {
  $delid = $_GET['deild'];
  $wpdb->query( 'DELETE FROM ' . $tablename . ' WHERE id = ' . $delid );
}
?>

<h1>All Entries</h1>
<table width = '100%' border = '1' style = 'border-collapse: collapse;'>
  <thead>
    <tr>
      <th>S.no</th>
      <th>Name</th>
      <th>Username</th>
      <th>Email</th>
      <th>&nbsp;</th>
    </tr>
  </thead>
  <tbody>
  <?php
  //Select records
  $entriesList = $wpdb->get_results( 'SELECT * FROM ' . $tablename . ' order by id desc' );
  if( count($entriesList) > 0 ) {
    $count = 1;
    foreach( $entriesList as $entry ) {
      $id = $entry->id;
      $name = $entry->name;
      $uname = $entry->username;
      $email = $entry->email;

      echo '<tr>
      <td>' . $count . ' </td>
      <td>' . $name . ' </td>
      <td>' . $uname . ' </td>
      <td>' . $email . ' </td>
      <td><a href="?page=allentries&delid=' . $id . '">Delete</a></td>
      </tr>';
      $count++;
    }
  }
  else {
    echo '<tr><td colspan='5'>No record found</td></tr>';
  }
  ?>
  </tbody>
</table>

4. addentry.php

Tạo 1 form với 3 input và submit button

Form này đọc dữ liệu và thực chèn câu truy vấn

<?php

global $wpdb;

// Add record
if( isset( $_POST['but_submit'] ) ){
  $name = $_POST['txt_name'];
  $uname = $_POST['txt_uname'];
  $email = $_POST['txt_email'];
  $tablename = $wpdb->prefix."lbk_lugin";

  if( $name != '' && $uname != '' && $email != '' ) {
     $check_data = $wpdb->get_results( "SELECT * FROM ".$tablename." WHERE username='".$uname."' " );
     if( count( $check_data ) == 0 ){
       $insert_sql = "INSERT INTO " . $tablename . "( name, username, email ) values( '" . $name . "','" . $uname . "','" . $email . "' )";
       $wpdb->query( $insert_sql );
       echo "Save sucessfully.";
     }
   }
}
?>
<h1>Add New Entry</h1>
<form method='post' action=''>
  <table>
    <tr>
      <td>Name</td>
      <td><input type='text' name='txt_name'></td>
    </tr>
    <tr>
     <td>Username</td>
     <td><input type='text' name='txt_uname'></td>
    </tr>
    <tr>
     <td>Email</td>
     <td><input type='text' name='txt_email'></td>
    </tr>
    <tr>
     <td>&nbsp;</td>
     <td><input type='submit' name='but_submit' value='Submit'></td>
    </tr>
 </table>
</form>
Bài viết cùng series:LBK Count View Plugin >>
Zalo
Messenger
Form liên hệ

Đăng ký nhận tư vấn

    Vui lòng để lại thông tin để chúng tôi trực tiếp tư vấn cho bạn.

    Họ tên
    Số điện thoại
    Ghi chú