Blogs, การพัฒนาเว็บไซต์, การสร้างเว็บไซต์

แจกฟรี! ปลั๊กอิน WordPress สร้าง Permalink (URL) ภาษาอังกฤษให้อัตโนมัติ เพื่อ SEO ที่ดีกว่า

สำหรับคนทำเว็บด้วย WordPress ที่เขียนบทความภาษาไทย เคยเจอปัญหานี้กันไหมครับ? เวลาที่เราตั้งชื่อเรื่อง (Title) ของบทความใหม่เป็นภาษาไทย เช่น “5 เทคนิคการตลาดออนไลน์สำหรับมือใหม่” พอเรากด Save Draft หรือ Publish ตัว WordPress ก็จะสร้าง URL หรือที่เรียกว่า Permalink ให้เป็นภาษาไทยตามไปด้วย กลายเป็น:

https://yourwebsite.com/5-เทคนิคการตลาดออนไลน์สำหรับมือใหม่/

ซึ่ง URL ที่เป็นภาษาไทยยาวๆ แบบนี้ นอกจากจะดูไม่สวยงามเวลาคัดลอกไปแชร์ในโซเชียลมีเดียแล้ว ยังส่งผลเสียต่อการทำ SEO (Search Engine Optimization) อีกด้วย เพราะ Search Engine อย่าง Google จะไม่ค่อยเข้าใจ URL ที่เป็นภาษาอื่นที่ไม่ใช่ภาษาอังกฤษเท่าไหร่นัก

แน่นอนว่าหลายคนแก้ปัญหานี้ด้วยการกด “แก้ไข” (Edit) ที่ช่อง Permalink แล้วนั่งพิมพ์เป็นภาษาอังกฤษเองทุกครั้ง ซึ่งก็เป็นวิธีที่ใช้ได้ แต่บางครั้งก็ลืม หรือบางทีก็คิดไม่ออกว่าจะใช้คำว่าอะไรดี ทำให้เสียเวลาและอาจเกิดความผิดพลาดได้

วันนี้ผมจึงมีตัวช่วยดีๆ ที่จะมาแก้ปัญหาน่ารำคาญนี้ให้หมดไปมาแจกกันครับ! นั่นก็คือ ดาวน์โหลด  “[Translate Slug to English]” ปลั๊กอินขนาดเล็กที่ทีมงานเราพัฒนาขึ้นมาเองเพื่อคนทำเว็บชาวไทยโดยเฉพาะ

เจ้าปลั๊กอินตัวนี้จะทำการ “แปลงชื่อเรื่องบทความภาษาไทยของคุณ ให้กลายเป็น Permalink ภาษาอังกฤษที่สวยงามและเป็นมิตรต่อ SEO โดยอัตโนมัติ” ทันทีที่คุณกดบันทึกบทความ

ตัวอย่างเช่น:

  • ชื่อเรื่อง: รีวิวคาเฟ่เปิดใหม่ย่านอารีย์
  • Permalink ที่สร้างอัตโนมัติ: review-new-cafe-in-ari/

ง่ายๆ แบบนี้เลยครับ คุณไม่ต้องมานั่งแก้ Permalink เองอีกต่อไป ช่วยประหยัดเวลาและทำให้เว็บไซต์ของคุณมีโครงสร้าง URL ที่ดีขึ้นทันที

เพิ่มเมนูตั้งค่าใน Admin Dashboard:

สร้างเมนูในแผงควบคุมของ WordPress (Settings page) Setting > Translate Slug ที่ให้ผู้ใช้สามารถเลือกได้ว่าอยากให้ Plugin นี้ทำงานกับ post, page, หรือ custom post type.


				
					<?php
/*
Plugin Name: Translate Slug to English
Plugin URI: https://jodbush.com
Description: A plugin to automatically translate post slugs to English.
Version: 1.1
Author: Jodbush
Author URI: https://jodbush.com
License: GPL2
*/

// สร้างเมนูการตั้งค่าใน Dashboard
function translate_slug_add_settings_menu() {
    add_options_page(
        'Translate Slug Settings', // ชื่อหน้าเมนู
        'Translate Slug', // ชื่อเมนู
        'manage_options', // สิทธิ์ในการเข้าถึง
        'translate-slug-settings', // slug ของเมนู
        'translate_slug_settings_page' // ฟังก์ชันในการแสดงหน้าการตั้งค่า
    );
}
add_action('admin_menu', 'translate_slug_add_settings_menu');

// หน้าการตั้งค่าใน admin
function translate_slug_settings_page() {
    ?>
    <div class="wrap">
        <h1>Translate Slug Settings</h1>
        <form method="post" action="options.php">
            <?php
            settings_fields('translate_slug_options_group');
            do_settings_sections('translate-slug-settings');
            ?>
            <table class="form-table">
                <tr valign="top">
                    <th scope="row">เลือก Post Types ที่จะใช้แปล Slug:</th>
                    <td>
                        <fieldset>
                            <?php
                            // เก็บตัวเลือกที่ผู้ใช้เลือก
                            $selected_post_types = get_option('translate_slug_post_types', array('post'));
                            ?>
                            <label><input type="checkbox" name="translate_slug_post_types[]" value="post" <?php checked(in_array('post', $selected_post_types)); ?> /> Post</label><br>
                            <label><input type="checkbox" name="translate_slug_post_types[]" value="page" <?php checked(in_array('page', $selected_post_types)); ?> /> Page</label><br>
                            <label><input type="checkbox" name="translate_slug_post_types[]" value="product" <?php checked(in_array('product', $selected_post_types)); ?> /> Product (WooCommerce)</label><br>
                            <?php
                            // แสดง Custom Post Types ที่มีในเว็บไซต์
                            $post_types = get_post_types(array('public' => true), 'objects');
                            foreach ($post_types as $post_type) {
                                // ตรวจสอบให้มั่นใจว่าไม่ซ้ำกับ "post" และ "product"
                                if ($post_type->name != 'post' && $post_type->name != 'product') {
                                    echo '<label><input type="checkbox" name="translate_slug_post_types[]" value="' . esc_attr($post_type->name) . '" ' . checked(in_array($post_type->name, $selected_post_types), true, false) . ' /> ' . esc_html($post_type->label) . '</label><br>';
                                }
                            }
                            ?>
                        </fieldset>
                    </td>
                </tr>
            </table>
            <?php submit_button(); ?>
        </form>
    </div>
    <?php
}

// ลงทะเบียนตัวเลือกการตั้งค่า
function translate_slug_register_settings() {
    register_setting('translate_slug_options_group', 'translate_slug_post_types');
}
add_action('admin_init', 'translate_slug_register_settings');

// ฟังก์ชั่นสำหรับแปล slug เป็นภาษาอังกฤษ
function translate_slug_to_english($title) {
    // แปลภาษาไทยเป็นภาษาอังกฤษ (ตัวอย่างการแปลงแบบง่าย)
    $translated = iconv('UTF-8', 'ASCII//TRANSLIT', $title); // แปลงภาษาไทยให้เป็นตัวอักษร ASCII
    return sanitize_title($translated); // ใช้ sanitize_title เพื่อทำให้เป็น slug ที่เหมาะสม
}

// ฟังก์ชั่นเมื่อมีการบันทึกโพสต์
function handle_post_save($post_id) {
    // ตรวจสอบว่ามีการบันทึกโพสต์ใหม่หรือไม่
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id;

    // ตรวจสอบว่าเป็น post type ที่ผู้ใช้เลือกไว้หรือไม่
    $selected_post_types = get_option('translate_slug_post_types', array('post'));
    if (!in_array(get_post_type($post_id), $selected_post_types)) {
        return $post_id; // ถ้า post type ไม่ตรงกับที่เลือก ให้ข้ามการแปล slug
    }

    // ตรวจสอบว่าเป็นโพสต์หรือไม่
    if ('post' != $_POST['post_type']) return $post_id;

    // ตรวจสอบว่าเป็นการแก้ไขโพสต์หรือไม่
    if (get_post_status($post_id) === 'auto-draft') {
        return $post_id;
    }

    // ดึง title ของโพสต์
    $post_title = get_post_field('post_title', $post_id);

    // แปล slug และอัพเดต
    $translated_slug = translate_slug_to_english($post_title);
    $current_slug = get_post_field('post_name', $post_id);

    // หาก slug เปลี่ยนแปลง ก็อัพเดต
    if ($translated_slug !== $current_slug) {
        wp_update_post(array(
            'ID' => $post_id,
            'post_name' => $translated_slug // ตั้งค่า slug ใหม่
        ));
    }

    return $post_id;
}
add_action('save_post', 'handle_post_save');