Jasa Pembuatan WebsiteJasa Pembuatan WebsiteJasa Pembuatan Website
Menu
  • Tentang Kami
  • Portofolio
  • Paket Web
  • Promo
    • Hosting Terbaik Unlimited
  • Tutorial Website
  • GRATISAN
  • Lokasi
  • Artikel

Cara Membuat Custom Plugin WordPress Sendiri

  • Home
  • Blog
  • Cara Membuat Custom Plugin WordPress...

Cara Membuat Custom Plugin WordPress Sendiri

CategoriesArtikel / tutorial website

Yudith Hentreisa

Juli 22, 2024

0 0

Share this post

Cara Membuat Custom Plugin WordPress Sendiri – Dalam tutorial ini, kita akan mendalami pengembangan Custom Plugin WordPress menggunakan bahasa PHP. Tujuan utamanya adalah memberikan referensi kepada pelajar dan pemula, terutama mereka yang baru mengenal WordPress dan PHP, untuk mempelajari teknik-teknik yang berguna guna meningkatkan pengetahuan dan kemampuan pemrograman mereka. Saya akan menyertakan cuplikan kode sampel dan kode sumber plugin WordPress sampel yang menunjukkan tujuan utama kita dalam tutorial ini.

Apa itu WordPress?

WordPress adalah sistem manajemen konten (CMS) sumber terbuka yang banyak digunakan yang memungkinkan pengguna untuk membuat dan mengelola situs web dan blog. WordPress ditulis dalam bahasa PHP dan menggunakan basis data MySQL atau MariaDB. WordPress telah berkembang dari asalnya sebagai platform blog menjadi CMS yang serbaguna yang digunakan oleh individu, bisnis, dan organisasi untuk berbagai jenis situs web, termasuk blog, portofolio, situs e-commerce, dan situs web perusahaan.

Apa itu Plugin WordPress?

Plugin WordPress adalah komponen perangkat lunak yang memperluas dan meningkatkan fungsi situs web WordPress. Plugin sangat penting dalam membuat WordPress menjadi sistem manajemen konten (CMS) yang fleksibel dan dapat disesuaikan. Plugin memungkinkan pengguna untuk menggabungkan fitur atau kemampuan tertentu ke dalam situs web mereka tanpa memodifikasi kode inti WordPress.

Bagaimana Cara Membuat Custom Plugin WordPress?

Langkah 1

Untuk membuat Custom Plugin WordPress, buat direktori baru di situs web WordPress Anda dalam folder source_code_path>wp-contents>plugins. Kemudian, buat file PHP baru.

Langkah 2

Buka file PHP yang baru Anda buat dengan editor kode pilihan Anda, seperti MS VS Code, Sublime, atau Notepad++.

Langkah 3

Selanjutnya, kita perlu memberikan header informasi Plugin di baris atas file PHP. Header informasi ini ditempatkan dalam tag komentar. Di bawah ini adalah contoh header informasi untuk Plugin WordPress sampel:

<?php
/**
 * Plugin Name: My Custom Plugin Name
 * Plugin URI: URI of your plugin where your docs, updates, or etc located
 * Description: A brief description of yout plugin
 * Version: your plugin version
 * Author: the plugins author name
 * Author URI: the plugins author URI
 * License: license name e.g. GPL2
 */  
?>

Setelah menyelesaikan langkah-langkah ini, Anda akan dapat menemukan Custom Plugin WordPress Anda di Halaman Plugin pada sisi admin WordPress Anda.

Cara Membuat Custom Plugin WordPress Sendiri

Untuk pemahaman yang lebih baik dalam membuat Custom Plugin WordPress, saya telah mengembangkan plugin sederhana yang mencakup fitur CRUD (Create, Read, Update, dan Delete) pada sisi admin. Script plugin yang disediakan juga melibatkan pembuatan tabel database baru.

Berikut adalah script PHP untuk plugin sederhana yang saya buat:

<?php
/**
    * Plugin Name: My First Custom Plugin
    * Plugin URI: https://sample-domain.com
    * Description: Lorem ipsum dolor sit amet consectetur adipisicing elit.
    * Version: 1.0
    * Author: oretnom23
    * Author URI: https://www.sourcecodester.com/user/257130/activity
    * License: GPLv2 or later
    */    
 
if ( ! defined( 'ABSPATH' ) ) {
    die;
}
 
class MyFirstPlugin{
    public $notices = [];
    function __construct()
    {
        add_action( 'admin_menu', [ $this, 'pages' ] );
        add_action( 'admin_enqueue_scripts', [$this, 'bootstrap_scripts'], 10, 1 );
 
        // Process Form
        add_action( 'admin_init', [ $this, 'save_form' ] );
        add_action( 'admin_init', [ $this, 'delete_mfcp' ] );
 
        $this->notices = get_option("mfcp_notices", array());
        // print_r(gettype($this->notices));exit;
        add_action( 'admin_notices', [$this, 'display_notices'] );
    }
 
    function pages(){
        //add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position );
        add_menu_page(__('My First Custom Plugin'), __('Custom Plugin'), 'administrator', 'my-first-custom-plugin-page', [$this, 'my_plugin_list_page'], '', 25); 
        add_submenu_page('my-first-custom-plugin-page', __('Manage Plugin\'s DB'), __('Add New'), 'administrator', 'my-first-custom-plugin-page-form', [$this, 'my_plugin_form_page']); 
    }
 
    function display_notices(){
        // print_r($this->notices);exit;
        if(count($this->notices) > 0){
            foreach($this->notices as $k =>$notice){
                ?>
                <div class="notice notice-<?= $notice['type'] ?> <?= ($notice['dismissible']) ? "is-dismissible" : "" ?>">
                    <?= htmlspecialchars_decode($notice['message']) ?>
                </div>
                <?php
                unset($this->notices[$k]);
            }
        }
        update_option("mfcp_notices", []);
 
    }
    function activate(){
        // Install Plugin's Database
        $this->install_db();
    }
    function deactivate(){
 
    }
    function uninstall(){
    }
 
    /**
        * Enqueue Styles and Scripts
        */
    function bootstrap_scripts($hook){
        // Enqueue Bootstrap CDN CSS and JS only in plugin's page
        if($hook == 'toplevel_page_my-first-custom-plugin-page' || $hook == 'custom-plugin_page_my-first-custom-plugin-page-form'){
            wp_enqueue_style("fontawesome-icon-cdn","https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.2/css/all.min.css",[],"6.1.2", "all");
            wp_enqueue_style("bootstrap-css-cdn","https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css",[],"5.3.2", "all");
 
            wp_enqueue_script("fontawesome-icon-js-cdn","https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.2/js/all.min.js",[],"6.1.2", "all");
            wp_enqueue_script("bootstrap-js-cdn","https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js",[],"5.3.2", "all");
        }
        // echo $hook;exit;
    }
 
    /**
        * Create Plugin's Database
        */
    function install_db(){
        global $wpdb;
        $table = $wpdb->prefix."mfp_tbl";
        $qry = $wpdb->prepare("SHOW TABLES LIKE %s", $wpdb->esc_like($table));
        if($wpdb->get_var($qry) == $table){
            /**
                * Table Already Exists
                */
 
        }else{
            /**
                * Table Doesn't Exists on the Database
                * - Install Table
                */
            $charset_collate = $wpdb->get_charset_collate();
 
            $sql = "CREATE TABLE IF NOT EXISTS $table  (
                `id` int(30) NOT NULL PRIMARY KEY AUTO_INCREMENT,
                `meta_field` text DEFAULT NULL,
                `meta_value` text DEFAULT NULL,
                `created_at` datetime NOT NULL DEFAULT current_timestamp(),
                `updated_at` datetime DEFAULT NULL ON UPDATE current_timestamp()
            ) $charset_collate;";
            require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
            dbDelta($sql);
        }
    }
 
    /**
        * Create Plugin's Form Page
        */
    function my_plugin_form_page(){
        global $wpdb;
        if(isset($_GET['mfcp_id'])){
            $data = $wpdb->get_row(
                $wpdb->prepare("SELECT * FROM `{$wpdb->prefix}mfp_tbl` where `id` = %d", [$_GET['mfcp_id']]),
                ARRAY_A
            );
            extract($data, EXTR_PREFIX_ALL, "mfcp");
        }
        ?>
        <style>
            .card{
                max-width: unset !important;
            }
        </style>
        <div class="container-fluid">
            <div class="card shadow col-lg-5 col-md-8 col-sm-12 col-12 mx-auto p-0">
                <div class="card-header rounded-0">
                    <div class="card-title">Plugin's Sample Form <?= (!empty($mfcp_id ?? "")? " - Updating #{$mfcp_id}" : "") ?></div>
                </div>
                <div class="card-body">
                    <div class="container-fluid">
                        <form action="" id="sample-form" method="POST">
                            <?php wp_nonce_field( "mfcp-sample-form" ); ?>
                            <input type="hidden" name="action" value="save-mfcp-sample-form">
                            <input type="hidden" name="id" value="<?= $mfcp_id ?? "" ?>">
                            <div class="mb-3">
                                <label for="meta_field" class="form-label">Meta Field <small class="text-danger">*</small></label>
                                <input type="text" class="form-control rounded-0" id="meta_field" name="meta_field" value="<?= $_POST['meta_field'] ?? $mfcp_meta_field ?? "" ?>" required="required" autofocus>
                            </div>
                            <div class="mb-3">
                                <label for="meta_value" class="form-label">Meta Value <small class="text-danger">*</small></label>
                                <textarea name="meta_value" id="meta_value" rows="3" class="form-control rounded-0" requried=""><?= $_POST['meta_value'] ?? $mfcp_meta_value ?? "" ?></textarea>
                            </div>
                            <div class="mb-3">
                                <button class="btn btn-primary rounded-0" type="submit">Save</button>
                            </div>
                        </form>
                    </div>
                </div>
            </div>
        </div>
        <?
    }
 
    /**
        * Create Plugin's List Page
        */
 
    function my_plugin_list_page(){
        global $wpdb;
        $data = $wpdb->get_results(
            $wpdb->prepare("
                SELECT * FROM `{$wpdb->prefix}mfp_tbl` order by id ASC
            "),
            ARRAY_A
        );
        ?>
        <style>
            .card{
                max-width: unset !important;
            }
        </style>
        <div class="container-fluid">
            <div class="card shadow col-12 p-0">
                <div class="card-header rounded-0">
                    <div class="card-title">Plugin's Database Data</div>
                </div>
                <div class="card-body">
                    <div class="container-fluid">
                        <div class="table-responsive">
                            <table class="table table-striped table-hover table-bordered">
                                <colgroup>
                                    <col width="20%">
                                    <col width="30%">
                                    <col width="30%">
                                    <col width="20%">
                                </colgroup>
                                <thead>
                                    <tr>
                                        <th class="text-center px-2 py-1 text-light bg-primary">Date Added</th>
                                        <th class="text-center px-2 py-1 text-light bg-primary">Meta Field</th>
                                        <th class="text-center px-2 py-1 text-light bg-primary">Meta Value</th>
                                        <th class="text-center px-2 py-1 text-light bg-primary">Action</th>
                                    </tr>
                                </thead>
                                <tbody>
                                    <?php if(!empty($data)): ?>
                                    <?php foreach($data as $row): ?>
                                        <tr>
                                            <td class="px-2 py-1"><?= date("M d, Y g:i A", strtotime($row['created_at'])) ?></td>
                                            <td class="px-2 py-1"><?= $row['meta_field'] ?></td>
                                            <td class="px-2 py-1"><?= $row['meta_value'] ?></td>
                                            <td class="px-2 py-1">
                                                <div class="input-group d-flex justify-content-center">
                                                    <a href="<?= admin_url("admin.php?page=my-first-custom-plugin-page-form&mfcp_id={$row['id']}") ?>" class="btn btn-sm btn-outline-primary rounded-0" title="Edit"><i class="fa fa-edit"></i></a>
                                                    <a href="<?= admin_url("admin.php?page=my-first-custom-plugin-page-form&action=delete_mfcp&mfcp_id={$row['id']}") ?>" class="btn btn-sm btn-outline-danger rounded-0 delete-mfcp" title="Delete"><i class="fa fa-trash"></i></a>
                                                </div>
                                            </td>
                                        </tr>
                                    <?php endforeach; ?>
                                    <?php else: ?>
                                        <tr>
                                            <th class="text-center px-2 py-1" colspan="4">No Data Found!</th>
                                        </tr>
                                    <?php endif; ?>
                                </tbody>
                            </table>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <script>
            var delete_mfcp = document.querySelectorAll('.delete-mfcp')
            delete_mfcp.forEach(el=>{
                el.addEventListener('click', function(e){
                    if(confirm(`Are you sure to delete this data?`) === false)
                    e.preventDefault();
                })
            })
        </script>
        <?
    }
 
 
    /**
        * Save Form Data
        */
    function save_form(){
        global $wpdb;
        extract($_POST, EXTR_PREFIX_ALL, "mfcp");
        $resp=[];
        if(
            isset($_POST['action']) &&
            $_POST['action'] == 'save-mfcp-sample-form'
        ){
            if(!wp_verify_nonce( $mfcp__wpnonce, 'mfcp-sample-form')){
                $resp = ["type" => "danger", "message" => "Security Check Failed!"];
            }else{
                $mfcp_meta_field = sanitize_text_field( $mfcp_meta_field );
                $mfcp_meta_value = sanitize_textarea_field( $mfcp_meta_value );
                if(empty($mfcp_id)){
                    $save = $wpdb->insert(
                        "{$wpdb->prefix}mfp_tbl",
                        [
                            "meta_field" => $mfcp_meta_field,
                            "meta_value" => $mfcp_meta_value
                        ],
                        [
                            '%s',
                            '%s'
                        ]
                    );
                }else{
                    $save = $wpdb->update("{$wpdb->prefix}mfp_tbl",
                    [
                        "meta_field" => $mfcp_meta_field,
                        "meta_value" => $mfcp_meta_value
                    ],
                    [
                        "id" => $mfcp_id,
                    ],
                    [
                        '%s',
                        '%s'
                    ],
                    [
                        '%d',
                    ]
                    );
                }
                if($wpdb->last_error){
                    $resp = ["type" => "danger", "message" => $wpdb->last_error];
                }else{
                    $resp = ["type" => "success", "message" => "Data has been saved successfully!"];
                }
            }
 
            $this->notices[] = $resp;
            update_option("mfcp_notices", $this->notices);
            echo "<script>location.replace(`".admin_url("admin.php?page=my-first-custom-plugin-page")."`)</script>";
            exit;
        }
 
    }
 
    /**
        * Delete Data
        */
    function delete_mfcp(){
        global $wpdb;
        if(
            isset($_GET['page']) && 
            $_GET['page'] == 'my-first-custom-plugin-page-form' &&
            isset($_GET['action']) && 
            $_GET['action'] == 'delete_mfcp'&&
            isset($_GET['mfcp_id'])
        ){
            $delete = $wpdb->delete("{$wpdb->prefix}mfp_tbl", [ "id" =>  $_GET['mfcp_id']], ['%d']);
            if($wpdb->last_error){
                $resp = ["type" => "danger", "message" => $wpdb->last_error];
            }else{
                $resp = ["type" => "success", "message" => "Data has been deleted successfully!"];
            }
            $this->notices[] = $resp;
            update_option("mfcp_notices", $this->notices);
            echo "<script>location.replace(document.referrer)</script>";
            exit;
        }
    }
 
}
 
if(class_exists("MyFirstPlugin")){
    $MyFirstPlugin = new MyFirstPlugin();
    register_activation_hook(__FILE__ , array ( $MyFirstPlugin , 'activate' ) );
}

Cuplikan Layar

Jelajahi cuplikan layar di bawah ini, yang menangkap hasil dari Script Custom Plugin WordPress yang disediakan di atas:

Dan selesai! Saya berharap Panduan Custom Plugin WordPress ini bermanfaat untuk kebutuhan Anda dan menjadi sumber daya berharga untuk proyek WordPress Anda saat ini dan di masa mendatang.

Jika anda membutuhkan jasa pembuatan website wordpress custom bisa menghubungi nomor WA 087823179122 atau klik tombol WA di bawah website Kami. Terimakasih teleh membaca artikel Cara Membuat Custom Plugin WordPress Sendiri, Semoga Bermanfaat!

Tags: belejar plugin wordpress, cara membuat plugin wordpress, jasa wordpress, tutorial plugin wordpress

Related Post

MEI 7, 2025

120+ ChatGPT Prompts for...

Looking for inspiration to speed up your content creation process? We’ve compiled 120+...

00

FEBRUARI 3, 2025

Tingkatkan Efisiensi...

Mengelola peminjaman ruangan secara manual seringkali memakan waktu dan rentan terhadap...

00

FEBRUARI 1, 2025

Membuat Peta Lokasi Sederhana...

Anda ingin Membuat Peta Lokasi Sederhana dengan PHP dan Leaflet JS? Saya akan menjelaskan...

00

DESEMBER 12, 2024

“Mr. Fix It...

Mr fix it website – Looking for reliable home repair and remodeling solutions in...

00

DESEMBER 10, 2024

Jasa Web WordPress: Solusi...

Jasa Web WordPress – WordPress telah menjadi platform populer untuk pembuatan...

00

DESEMBER 9, 2024

Cara Menghilangkan Iklan di...

Cara Menghilangkan Iklan di HP Oppo – Iklan yang muncul tiba-tiba di HP Oppo sering...

00

Recent Posts

  • 120+ ChatGPT Prompts for Content Creators [Free PDF Download]

    Mei 7, 2025
  • Download Source Code Laravel CRUD Builder Otomatis

    April 17, 2025
  • Reddit Stock (RDDT): What Investors Need to Know Ahead of the Next Earnings Report

    Februari 13, 2025
  • Joann Stores Closing: Crafting and Communities Throughout the United States

    Februari 13, 2025
  • Download Source Code File Manager – Host dan Share File

    Februari 4, 2025
Sundakreatif.com merupakan Jasa pembuatan website yang sudah dimulai sejak tahun 2009 (Sebelumnya bernama hentreiza-web.com). Sudah berpengalaman membuat lebih dari 400+ website. Berkreasi untuk mewujudkan keinginan Anda dalam membangun website sesuai dengan kebutuhan Anda.

LIVE CHAT (Klik Gambar)


Hubungi Kami

Sundakreatif.com

Lokasi : Bandung / Cimahi
SMS/WA : +6287823179122
LINE : Hentreiza
EMAIL : HENTREIZA @ GMAIL.COM
Comodo SSL

© 2016 Jasa Pembuatan Website, All Rights Reserved.