Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the wordpress-seo domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /var/www/vinascript/html/wp-includes/functions.php on line 6114
Hướng dẫn tạo một WordPress Plugin chi tiết nhất - VinaScript

Latest Post

Triển khai dự án PHP, Mysql với Nginx trên Docker Tìm hiểu về HTML – Ưu điểm, nhược điểm và cách hoạt động của HTML

Bên cạnh phần core, WordPress có hai thành phần quan trọng khác là Theme và Plugin. Cả hai đều đóng vai trò quan trọng trong việc phát triển một trang web WordPress toàn diện. Trong bài viết này, chúng tôi sẽ hướng dẫn bạn về việc tạo một plugin cho WordPress.

WordPress Plugin là gì?

WordPress Plugin là một tập hợp mã nguồn mở được thiết kế để mở rộng và bổ sung chức năng của một trang web xây dựng bằng mã nguồn WordPress. Chúng cho phép bạn mở rộng trang web của mình bằng cách thêm các phần mở rộng giao diện, bao gồm cả các tệp CSS (style) và JavaScript.

Xây dựng một WordPress Plugin

Bước 1: Tạo thư mục cho plugin

Một plugin của WordPress là một thư mục được đặt tại thư mục /<root>/wp-content/plugins/

VD: Mình tạo một plugin DMCA Reports với chức năng là cho người dùng gửi các báo cáo về các bài viết vi phạm. Mình sẽ tạo 1 thư mục cho plugin với đường dẫn là /<root>/wp-content/plugins/dmca-report/

Bước 2: Tạo file main của plugin.

Trong thư mục của plugin bạn vừa tạo ở bước trước, bạn cần tạo một tệp tin chứa mã nguồn của plugin. Tệp tin này thường được gọi là “main” và nó sẽ bao gồm các thành phần cần thiết của plugin như các tệp PHP, JavaScript, hoặc CSS khác. Bạn tự quyết định tên của tệp tin main, nhưng thông thường nó được đặt theo tên của plugin. Ví dụ, nếu tên plugin của bạn là “dmca-reports,” thì tên tệp tin main có thể là “dmca-reports.php.”

File main bắt buộc phải chưa phần Doc Block chứa các thông tin khai báo cho plugin.

Tạo file  /<root>/wp-content/plugins/dmca-report/dmca-report.php với nội dung như sau:

<?php
/**
 * Plugin Name:       DMCA Reports
 * Plugin URI:        https://vinasupport.com/plugins/dmca-report
 * Description:       DMCA Link Reports Management
 * Version:           1.0
 * Requires at least: 5.2
 * Requires PHP:      7.4
 * Author:            Manlivo
 * Author URI:        https://vinasupport.com
 * License:           GPL v2 or later
 * License URI:       https://www.gnu.org/licenses/gpl-2.0.html
 * Update URI:        https://vinasupport.com/plugins/dmca-reports
 * Text Domain:       dmca-report
 * Domain Path:       /languages
 */

Nó sẽ hiển thị thông tin trong phần cài đặt plugin ở [ Settings ] => [ Plugins ]

Để kích hoạt chúng ta bấm [ Active ]. Plugin sẽ được kích hoạt thành công.

Đây là một bước cơ bản để tạo một plugin cho WordPress, tuy nhiên, điều quan trọng nhất là bạn phải xem xét nội dung của plugin của mình. Trong ví dụ này, chúng ta sẽ tạo một plugin dành cho việc báo cáo vi phạm bản quyền DMCA, giúp người dùng có thể báo cáo các bài viết trên trang web mà họ cho là đã vi phạm bản quyền.

Ở file /<root>/wp-content/plugins/dmca-report/dmca-report.php mình có đoạn code load các file và thư mục mà sẽ được sử dụng trong plugin

<?php
// Plugin Directory
define('DMCA_REPORT_PATH', plugin_dir_path(__FILE__));

$includeDirs = [
    'includes',
    'database',
];
// Load all files in folder
foreach ($includeDirs as $dir) {
    foreach (glob(DMCA_REPORT_PATH . "/src/{$dir}/*.php") as $filename) {
        include_once $filename;
    }
}

Bước 2: Tạo database cho plugin.

Mình sẽ tạo một database có thiết kế như sau:

Tạo 1 file php có đường dẫn /<root>/wp-content/plugins/dmca-report/src/database/dmca-report-table.php chứa đoạn code tạo database.

<?php
global $dmcaReportDbVersion;
// DMCA Report DB Version
$dmcaReportDbVersion = '1';

/**
 * @return void
 */
function dmcaReportInstall(): void
{
    global $wpdb,
    $dmcaReportDbVersion;
    // Table Name
    $tableName = $wpdb->prefix . 'dmca_report_links';
    // Charset Collate
    $charsetCollate = $wpdb->get_charset_collate();
    // Run SQL
    require_once ABSPATH . 'wp-admin/includes/upgrade.php';
    dbDelta( "
        CREATE TABLE $tableName (
          `report_link_id` bigint(20) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
          `post_id` bigint(20) UNSIGNED NOT NULL,
          `post_title` tinytext COLLATE utf8mb4_unicode_ci NOT NULL,
          `post_link` tinytext COLLATE utf8mb4_unicode_ci NOT NULL,
          `report_date` datetime NOT NULL,
          `report_name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
          `report_email` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
          `report_content` text COLLATE utf8mb4_unicode_ci NOT NULL,
          `report_ip_address` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
          `user_agent` text COLLATE utf8mb4_unicode_ci NOT NULL,
          `ignored` tinyint(1) UNSIGNED NOT NULL DEFAULT '0',
          `deleted_at` datetime DEFAULT NULL
        ) ENGINE=InnoDB $charsetCollate;
    " );
    // Add index
    $wpdb->query("ALTER TABLE $tableName ADD KEY `post_id_idx` (`post_id`);");
    // Add option
    add_option( 'dmca_report_db_version', $dmcaReportDbVersion );
}

Ở file main của plugin /<root>/wp-content/plugins/dmca-report/dmca-report.php thêm đoạn hook sau:

register_activation_hook( __FILE__, 'dmcaReportInstall' );

Đoạn hook này sẽ được kích hoạt gọi đến function xử lý tạo database khi bạn bấm active 1 plugin.

Bước 3: Tạo một button ở trang bài viết để báo cáo DMCA

Mình tạo thêm 2 thư mục trong plugin là /src/includes là nhúng các file xử lý php vào, và thư mục /src/views để chứa giao diện hiển thị.

Sau đó mình tạo file /src/includes/functions.php để xử lý đoạn code hiển thị sau:

// Add button to post content
add_filter( 'the_content', function ($content) {
    ob_start();
    include(DMCA_REPORT_PATH . 'src/views/dmca-button.php');
    return $content . ob_get_clean();
}, 1 );

Và tạo một file template cho button /src/views/dmca-button.php

<a class="button" href="<?php bloginfo('wpurl'); ?>/dmca/<?= get_the_ID(); ?>/">DMCA Report</a>

Nó sẽ hiển thị button dmca trong bài viết:

Bước 3: Tạo 1 page chứa form để report bài viết.

Tạo file src/includes/rewrite.php có nội dung như sau:

// Add rule for dmca page
add_action( 'init', function () {
    flush_rewrite_rules();
    add_rewrite_rule(
        'dmca/([0-9]+)/?

Và file template src/views/dmca-report-form.php

<?php
$post = get_post(get_query_var('dmca_report_post_id'))
?>

<form action="" method="post">
    <p>
        Report URL: <?php echo get_permalink($post->ID); ?>
    </p>
    <p>
        <label for="report_name">Name:</label><br />
        <input type="text" name="report_name" id="report_name" value="" />
    </p>
    <p>
        <label for="report_email">Email:</label><br />
        <input type="text" name="report_email" id="report_email" value="" />
    </p>
    <p>
        <label for="report_content">Message:</label><br />
        <textarea name="report_content" id="report_content"></textarea>
    </p>
    <p>
        <input type="hidden" name="post_id" value="<?= $post->ID; ?>">
        <input type="submit" name="dmca_report_submit" value="Submit" />
    </p>
</form>

Nó sẽ tạo ra một form giống như là:

Bước 4: Tạo xử lý update dữ liệu vào database WordPress

Sửa file src/includes/functions.php thêm đoạn code sau:

// Update data for dmca
add_action('init', function (){
    global $wpdb;
    if (isset($_POST['dmca_report_submit'])) {
        // get Post ID
        $postId = intval($_POST['post_id']);
        if ($postId > 0) {
            // Get Post
            $post = get_post($postId);
            if ($post) {
                $data = [
                    'post_id' => $postId,
                    'post_title' => $post->post_title,
                    'post_link' => get_permalink($postId),
                    'report_date' => current_time('Y-m-d H:i:s'),
                    'report_name' => sanitize_text_field($_POST['report_name']),
                    'report_email' => sanitize_email($_POST['report_email']),
                    'report_content' => sanitize_textarea_field($_POST['report_content']),
                    'report_ip_address' => $_SERVER['REMOTE_ADDR'] ?? '',
                    'user_agent' => $_SERVER['HTTP_USER_AGENT'] ?? '',
                ];
                $table = $wpdb->prefix . 'dmca_report_links';
                // Insert to database
                $wpdb->insert($table, $data);
            }
        }
    }
});

Sau khi submit form đoạn code này sẽ lưu vào database.

Kết luận

Trong bài viết này, tôi sẽ chỉ định hướng cách tạo một plugin WordPress với các thao tác cơ bản như chỉnh sửa chức năng của WordPress, tạo giao diện, và quản lý cơ sở dữ liệu. Tuy nhiên, plugin hiện chỉ đạt mức hoàn thiện cơ bản và bạn có thể cần phát triển thêm để đáp ứng các yêu cầu cụ thể của dự án của bạn.

Bạn có thể down đoạn source code demo tại đây:

Plugin DMCA Report

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *